Create A histogram using C++ with map/unordered_map: the default value for a non-existant key

c++

Solution

Yes, the value inserted by `[]` is guaranteed to be zero. From C++11 23.4.4.3/1:

Effects: If there is no key equivalent to `x` in the map, inserts `value_type(x, T())` into the map.

`T()` specifies value-initialisation which, for numeric types, means it's initialised with the value zero.

Problem

I am defining a small function to create a histogram of a vector of integers, Initially I defined the following function that first test whether the key exists in the map before assigning or increment the value. ``` map<int, int> histogram(vector<int> &a){ map<int, int> hist; for (auto &x : a){ hist[x] = hist.count(x) == 0 ? 1 : hist[x] + 1; // check key existence } return hist; } ``` Later, I found the following code also works without checking the existence of the key. Therefore the default value for a non-existent key is supposed to be ZERO. I am wondering is this behavior guaranteed to have a default zero value when referencing a key that does not exist? ``` map<int, int> histogram(vector<int> &a){ map<int, int> hist; for (auto &x : a){ hist[x]++; // without key existence checking. } return hist; } ```

Original source