Если я напишу так:
int main()
{
map<int, int> my_map;
my_map[0]++;
}
Будет гарантировано, что my_map[0] == 1? Т.е. при вызове my_map[0] создается std::pair< int const ,int>, но зануляеться ли второй аргумент, или там может быть все что угодно?
Да, гарантируется - значения фундаментальных типов инициализируются нулевым инициализатором (надеюсь, с названием не напутал... типа конструктора по умолчанию :)), который дает переменным нулевые значения (для bool - false).
Не забывайте, что std::map содержит элементы с уникальным ключом(каждый ключ единчтвенный)
mapped_type&
std::map::operator [](const key_iype& k)
выполняет поиск по ключу k, и возвращает соответствующее значение mapped_type, а если ключ k не найден, то в ассоциативный массив вставляется элемент с эти ключом и значением по умолчанию типа mapped_type. Т. е. в вашем случаи my_map[0] возвращает int(), значение которого равен нулю, заодно вы просто инкрементировали его и получили единицу
Продвижение своими сайтами как стратегия роста и независимости