std::unordered_map::operator[]
T& operator[]( const Key& key ); |
(1) | (since C++11) |
T& operator[]( Key&& key ); |
(2) | (since C++11) |
Inserts a new element to the container using key
as the key and a default constructed mapped value and returns a reference to the newly constructed mapped value. If an element with key key
already exists, no insertion is performed and a reference to its mapped value is returned.
If an insertion occurs and results in a rehashing of the container, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is equal to or greater than max_load_factor()*bucket_count().
Contents |
[edit] Parameters
key | - | the key of the element to find |
[edit] Return value
Reference to the mapped value of the new element if no element with key key
existed. Otherwise a reference to the mapped value of the existing element is returned.
[edit] Exceptions
If an exception is thrown by any operation, the insertion has no effect
[edit] Complexity
Average case: constant, worst case: linear in size.
[edit] Example
This example demonstrates how to modify existing values and insert new values using operator[]
:
#include <iostream> #include <unordered_map> int main() { std::unordered_map<char, int> letter_counts {{'a', 27}, {'b', 3}, {'c', 1}}; std::cout << "initially:\n"; for (const auto &pair : letter_counts) { std::cout << pair.first << ": " << pair.second << '\n'; } letter_counts['b'] = 42; // update an existing value letter_counts['x'] = 9; // insert a new value std::cout << "after modifications:\n"; for (const auto &pair : letter_counts) { std::cout << pair.first << ": " << pair.second << '\n'; } }
Output:
initially: a: 27 b: 3 c: 1 after modifications: a: 27 b: 42 c: 1 x: 9
The following example counts the occurrences of each word in a vector of strings:
#include <string> #include <iostream> #include <vector> #include <unordered_map> int main() { std::vector<std::string> words = { "this", "sentence", "is", "not", "a", "sentence", "this", "sentence", "is", "a", "hoax" }; std::unordered_map<std::string, size_t> word_map; for (const auto &w : words) { ++word_map[w]; } for (const auto &pair : word_map) { std::cout << pair.second << " occurrences of word '" << pair.first << "'\n"; } }
Output:
1 occurrences of word 'hoax' 2 occurrences of word 'this' 2 occurrences of word 'a' 2 occurrences of word 'is' 1 occurrences of word 'not' 3 occurrences of word 'sentence'
[edit] See also
access specified element with bounds checking (public member function) |