(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 |
T& operator[](const Key& key); | (1) | (since C++23) |
T& operator[]( Key&& key); | (2) | (since C++23) |
template<class K> T& operator[]( K&& x); | (3) | (since C++23) |
Returns a reference to the value that is mapped to a key equivalent tokey orx respectively, performing an insertion if such key does not already exist.
value_type object constructed in-place if the key does not exist. Equivalent toreturn try_emplace(x).first->second;.value_type object constructed in-place if the key does not exist. Equivalent toreturn try_emplace(std::move(x)).first->second;value_type object constructed in-place if there is no key that transparently comparesequivalent to the valuex.Compare istransparent. It allows calling this function without constructing an instance ofKey.| Information on iterator invalidation is copied fromhere |
Contents |
| key | - | the key of the element to find |
| x | - | a value of any type that can be transparently compared with a key |
If an exception is thrown by any operation, the insertion has no effect.
Logarithmic in the size of the container, plus the cost ofinsertion (if any) of an empty element.
operator[] is non-const because it inserts the key if it doesn't exist. If this behavior is undesirable or if the container isconst,at may be used.
insert_or_assign returns more information thanoperator[] and does not require default-constructibility of the mapped type.
#include <iostream>#include <string>#include <flat_map> void println(autoconst comment,autoconst& map){std::cout<< comment<<'{';for(constauto& pair: map)std::cout<<'{'<< pair.first<<": "<< pair.second<<'}';std::cout<<"}\n";} int main(){std::flat_map<char,int> letter_counts{{'a',27},{'b',3},{'c',1}}; println("letter_counts initially contains: ", letter_counts); letter_counts['b']=42;// updates an existing value letter_counts['x']=9;// inserts a new value println("after modifications it contains: ", letter_counts); // count the number of occurrences of each word// (the first call to operator[] initialized the counter with zero)std::flat_map<std::string,int> word_map;for(constauto& w:{"this","sentence","is","not","a","sentence","this","sentence","is","a","hoax"})++word_map[w]; word_map["that"];// just inserts the pair {"that", 0} for(constauto&[word, count]: word_map)std::cout<< count<<" occurrence(s) of word '"<< word<<"'\n";}
Output:
letter_counts initially contains: {{a: 27}{b: 3}{c: 1}}after modifications it contains: {{a: 27}{b: 42}{c: 1}{x: 9}}2 occurrence(s) of word 'a'1 occurrence(s) of word 'hoax'2 occurrence(s) of word 'is'1 occurrence(s) of word 'not'3 occurrence(s) of word 'sentence'0 occurrence(s) of word 'that'2 occurrence(s) of word 'this'| access specified element with bounds checking (public member function)[edit] | |
| inserts an element or assigns to the current element if the key already exists (public member function)[edit] | |
| inserts in-place if the key does not exist, does nothing if the key exists (public member function)[edit] |