(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 |
Member types | ||||||
Member functions | ||||||
Non-member functions | ||||||
| ||||||
Deduction guides(C++17) |
template<class M> std::pair<iterator,bool> insert_or_assign(const Key& k, M&& obj); | (1) | (since C++17) |
template<class M> std::pair<iterator,bool> insert_or_assign( Key&& k, M&& obj); | (2) | (since C++17) |
template<class K,class M> std::pair<iterator,bool> insert_or_assign( K&& k, M&& obj); | (3) | (since C++26) |
template<class M> iterator insert_or_assign( const_iterator hint,const Key& k, M&& obj); | (4) | (since C++17) |
template<class M> iterator insert_or_assign( const_iterator hint, Key&& k, M&& obj); | (5) | (since C++17) |
template<class K,class M> iterator insert_or_assign( const_iterator hint, K&& k, M&& obj); | (6) | (since C++26) |
mapped_type
corresponding to the keyk. If the key does not exist, inserts the new value as if byinsert
, constructing it fromvalue_type(k,std::forward<M>(obj)).mapped_type
corresponding to the keyk. If the key does not exist, constructs an objectu
ofvalue_type
withstd::forward<K>(k),std::forward<M>(obj)), then insertsu
into*this. Ifhash_function()(u.first)!= hash_function()(k)|| contains(u.first) istrue, the behavior is undefined. Thevalue_type
must beEmplaceConstructible intounordered_map
fromstd::forward<K>(k),std::forward<M>(obj). This overload participates in overload resolution only ifHash
andKeyEqual
are bothtransparent. This assumes that suchHash
is callable with bothK
andKey
type, and that theKeyEqual
is transparent, which, together, allows calling this function without constructing an instance ofKey
.The behavior is undefined(until C++20)The program is ill-formed(since C++20) ifstd::is_assignable_v<mapped_type&, M&&> isfalse.
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 |
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 |
obj | - | the value to insert or assign |
emplace
.emplace_hint
.insert_or_assign
returns more information thanoperator
[] and does not require default-constructibility of the mapped type.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_unordered_map_try_emplace | 201411L | (C++17) | std::unordered_map::try_emplace,std::unordered_map::insert_or_assign |
__cpp_lib_associative_heterogeneous_insertion | 202311L | (C++26) | Heterogeneous overloads for the remaining member functions inordered andunordered associativecontainers. Overloads(3) and(6). |
#include <iostream>#include <string>#include <unordered_map> void print_node(constauto& node){std::cout<<'['<< node.first<<"] = "<< node.second<<'\n';} void print_result(autoconst& pair){std::cout<<(pair.second?"inserted: ":"assigned: "); print_node(*pair.first);} int main(){std::unordered_map<std::string,std::string> myMap; print_result(myMap.insert_or_assign("a","apple")); print_result(myMap.insert_or_assign("b","banana")); print_result(myMap.insert_or_assign("c","cherry")); print_result(myMap.insert_or_assign("c","clementine")); for(constauto& node: myMap) print_node(node);}
Possible output:
inserted: [a] = appleinserted: [b] = bananainserted: [c] = cherryassigned: [c] = clementine[c] = clementine[a] = apple[b] = banana
access or insert specified element (public member function)[edit] | |
access specified element with bounds checking (public member function)[edit] | |
inserts elementsor nodes(since C++17) (public member function)[edit] | |
constructs element in-place (public member function)[edit] |