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 be
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, insertsvalue_type(x, T())
into the map.
T()
specifies value-initialisation which, for numeric types, means it's initialised with the value zero.
It is guaranteed to be zero-initialized for built-in types, and default constructed for user-defined types. The guarantee is that if an element for a given key does not exist, one is inserted, with the mapped_type being value initialized. For built-in types such as int
, this means zero initialization.
More information in this reference.
This is a guarantee by the behavior of std::map
's operator [] overload. If the key does not exist then it will be value-initialized for you. Since int
, when value-initialized is assigned to zero, you're safe here.