(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::map
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. Ifequal_range(u.first)== equal_range(k) isfalse, the behavior is undefined. Thevalue_type
must beEmplaceConstructible intomap
fromstd::forward<K>(k),std::forward<M>(obj). This overload participates in overload resolution only ifCompare
istransparent. It 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.
No iterators or references are 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_map_try_emplace | 201411L | (C++17) | std::map::try_emplace,std::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 <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::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);}
Output:
inserted: [a] = appleinserted: [b] = bananainserted: [c] = cherryassigned: [c] = clementine[a] = apple[b] = banana[c] = clementine
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] | |
(C++11) | constructs element in-place (public member function)[edit] |