оператор [] выглядит так:
Value& map<Key, Value>::operator[](const Key& key);
Если вы вызовете его с помощью ключа , которого еще нет на карте, он по умолчанию создаст новый экземпляр Значение , поместит его на карту под ключом Вы прошли и вернули ссылку на него. В этом случае у вас есть:
map<wstring,int> Scores;
Scores[wstrPlayerName]++;
Здесь значение равно int , а целые числа построены по умолчанию как 0, как если бы вы инициализировали их с помощью int () . Другие типы примитивов инициализируются аналогично ( например , double () , long () , bool () и т. Д.).
В конце ваш код помещает новую пару (wstrPlayerName, 0) в карту, затем возвращает ссылку на int, который вы затем увеличиваете. Таким образом, нет необходимости проверять, существует ли элемент, если вы хотите, чтобы все начиналось с 0.