В map гарантируется ли, что int инициализируется нулем?

#c #stdmap

#c #stdmap

Вопрос:

Например, подсчитайте вхождение слов в книгу, я видел, что кто-то просто написал:

 map<string, int> count;
string s;
while (cin >> s) count[s]  ;
  

Это правильный способ сделать это? Я тестировал на своей машине и, похоже, так. Но гарантируется ли инициализация нулем? Если это не так, я бы представил такой код:

 map<string, int> count;
string s;
while (cin >> s)
    if (count.find(s) != count.end())  count[s]  ;
    else count[s] = 1;
  

Ответ №1:

Да, operator[] на a std::map инициализирует значение с T() помощью , которое в случае int равно нулю.

Это задокументировано в разделе 23.4.4.3 стандарта C :

 Tamp; operator[](const key_typeamp; x);
  

Эффекты: если в карте нет ключа, эквивалентного x int, вставляется
value_type(x, T()) в карту.