FreeBSD Manual Pages
std::unorde...:try_emplace(3) C++ Standard Libarystd::unorde...:try_emplace(3) NAME std::unordered_map::try_emplace - std::unordered_map::try_emplace Synopsis template< class... Args > std::pair<iterator, bool> try_emplace( const Key& k, Args&&... (1) (since C++17) args ); template< class... Args > (2) (since C++17) std::pair<iterator, bool> try_emplace( Key&& k, Args&&... args ); template< class K, class... Args > (3) (since C++26) std::pair<iterator, bool> try_emplace( K&& k, Args&&... args ); template< class... Args > iterator try_emplace( const_iterator hint, const Key& k, Args&&... (4) (since C++17) args ); template< class... Args > iterator try_emplace( const_iterator hint, Key&& k, Args&&... args (5) (since C++17) ); template< class K, class... Args > iterator try_emplace( const_iterator hint, K&& k, Args&&... args (6) (since C++26) ); If a key equivalent to k already exists in the container, does noth- ing. Otherwise, inserts a new element into the container with key k and value con- structed with args. In such case: 1) Behaves like emplace except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(k), std::forward_as_tuple(std::forward<Args>(args)...)) 2) Behaves like emplace except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(std::move(k)), std::forward_as_tuple(std::forward<Args>(args)...)) 3) Behaves like emplace except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<K>(k)), std::forward_as_tuple(std::forward<Args>(args)...)) 4) Behaves like emplace_hint except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(k), std::forward_as_tuple(std::forward<Args>(args)...)) 5) Behaves like emplace_hint except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(std::move(k)), std::forward_as_tuple(std::forward<Args>(args)...)) 6) Behaves like emplace_hint except that the element is constructed as value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<K>(k)), std::forward_as_tuple(std::forward<Args>(args)...)) 1-6) If value_type is not EmplaceConstructible into unordered_map from the corresponding expression, the behavior is undefined. 3) This overload participates in overload resolution only if all following conditions are satisfied: * std::is_convertible_v<K&&, const_iterator> and std::is_convert- ible_v<K&&, iterator> are both false. * Hash::is_transparent and KeyEqual::is_transparent are valid and each denotes a type. If hash_function()(u.first) != hash_function()(k) || con- tains(u.first) is true, the behavior is undefined, where u is the new element to be inserted. 6) This overload participates in overload resolution only if Hash::is_transparent and KeyEqual::is_transparent are both valid and each denotes a type. If hash_function()(u.first) != hash_function()(k) || con- tains(u.first) is true, the behavior is undefined, where u is the new element to be inserted. If after the operation the new number of elements is greater than old max_load_factor() * bucket_count() a rehashing takes place. If rehashing occurs (due to the insertion), all iterators are inval- idated. Otherwise (no rehashing), iterators are not invalidated. Parameters k - the key used both to look up and to insert if not found hint - iterator to the position before which the new element will be inserted args - arguments to forward to the constructor of the element Return value 1-3) Same as for emplace. 4-6) Same as for emplace_hint. Complexity 1-3) Same as for emplace. 4-6) Same as for emplace_hint. Notes Unlike insert or emplace, these functions do not move from rvalue arguments if the insertion does not happen, which makes it easy to manipulate maps whose values are move-only types, such as std::unordered_map<std::string, std::unique_ptr<foo>>. In addition, try_emplace treats the key and the arguments to the mapped_type separately, unlike emplace, which requires the arguments to con- struct a value_type (that is, a std::pair). Overloads (3,6) can be called without constructing an object of type Key. Feature-test macro Value Std Feature __cpp_lib_unordered_map_try_emplace 201411L (C++17) std::unordered_map::try_emplace, std::un- ordered_map::insert_or_assign Heteroge- neous overloads for the __cpp_lib_associative_heterogeneous_insertion 202311L (C++26) remaining member functions in ordered and unordered associative contain- ers. Overloads (3) and (6). Example // Run this code #include <iostream> #include <string> #include <unordered_map> #include <utility> void print_node(const auto& node) { std::cout << '[' << node.first << "] = " << node.second << '\n'; } void print_result(auto const& pair) { std::cout << (pair.second ? "inserted: " : "ignored: "); print_node(*pair.first); } int main() { using namespace std::literals; std::unordered_map<std::string, std::string> m; print_result(m.try_emplace("a", "a"s)); print_result(m.try_emplace("b", "abcd")); print_result(m.try_emplace("c", 10, 'c')); print_result(m.try_emplace("c", "Won't be inserted")); for (const auto& p : m) print_node(p); } Possible output: inserted: [a] = a inserted: [b] = abcd inserted: [c] = cccccccccc ignored: [c] = cccccccccc [a] = a [b] = abcd [c] = cccccccccc See also emplace constructs element in-place (public member function) emplace_hint constructs elements in-place using a hint (public member function) inserts elements insert or nodes (since C++17) (public member function) http://cppreference.com 2024.06.10 std::unorde...:try_emplace(3)
NAME | Synopsis | Parameters | Return value | Complexity | Notes | Example | Possible output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::unordered_map::try_emplace&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
