(C++17) | ||||
Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
Associative | ||||
Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
Views | ||||
(C++20) | ||||
(C++23) | ||||
Tables | ||||
Iterator invalidation | ||||
Member function table | ||||
Non-member function table |
std::unordered_multimap
Member types | ||||||
Member functions | ||||||
Non-member functions | ||||||
| ||||||
Deduction guides(C++17) |
template<class...Args> iterator emplace( Args&&...args); | (since C++11) (constexpr since C++26) | |
Inserts a new element into the container constructed in-place with the givenargs.
The constructor of the new element (i.e.std::pair<const Key, T>) is called with exactly the same arguments as supplied toemplace
, forwarded viastd::forward<Args>(args)....
Ifvalue_type
is notEmplaceConstructible intounordered_multimap
fromargs, the behavior is undefined.
If after the operation the new number of elements is greater than oldmax_load_factor()
*
bucket_count()
a rehashing takes place.
If rehashing occurs (due to the insertion), all iterators are invalidated. Otherwise (no rehashing), iterators are not invalidated.
Contents |
args | - | arguments to forward to the constructor of the element |
An iterator to the inserted element.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
Amortized constant on average, worst case linear in the size of the container.
Careful use ofemplace
allows the new element to be constructed while avoiding unnecessary copy or move operations.
#include <iostream>#include <string>#include <utility>#include <unordered_map> int main(){std::unordered_multimap<std::string,std::string> m; // uses pair's move constructor m.emplace(std::make_pair(std::string("a"),std::string("a"))); // uses pair's converting move constructor m.emplace(std::make_pair("b","abcd")); // uses pair's template constructor m.emplace("d","ddd"); // emplace with duplicate key m.emplace("d","DDD"); // uses pair's piecewise constructor m.emplace(std::piecewise_construct,std::forward_as_tuple("c"),std::forward_as_tuple(10,'c')); for(constauto& p: m)std::cout<< p.first<<" => "<< p.second<<'\n';}
Possible output:
a => ab => abcdc => ccccccccccd => dddd => DDD
constructs elements in-place using a hint (public member function)[edit] | |
inserts elementsor nodes(since C++17) (public member function)[edit] |