C++ использование map[] с простыми типами

148
10 ноября 2019, 09:20

Если я напишу так:

int main()
{
  map<int, int> my_map;
  my_map[0]++;
}

Будет гарантировано, что my_map[0] == 1? Т.е. при вызове my_map[0] создается std::pair< int const ,int>, но зануляеться ли второй аргумент, или там может быть все что угодно?

Answer 1

Да, гарантируется - значения фундаментальных типов инициализируются нулевым инициализатором (надеюсь, с названием не напутал... типа конструктора по умолчанию :)), который дает переменным нулевые значения (для bool - false).

Answer 2

Не забывайте, что std::map содержит элементы с уникальным ключом(каждый ключ единчтвенный)

mapped_type&
std::map::operator [](const key_iype& k)

выполняет поиск по ключу k, и возвращает соответствующее значение mapped_type, а если ключ k не найден, то в ассоциативный массив вставляется элемент с эти ключом и значением по умолчанию типа mapped_type. Т. е. в вашем случаи my_map[0] возвращает int(), значение которого равен нулю, заодно вы просто инкрементировали его и получили единицу

READ ALSO
Зачем нужен шаблон без параметра?

Зачем нужен шаблон без параметра?

Есть пример кодаСовершенно не понимаю что это

112
Qt Проблема с удалением widget из layout

Qt Проблема с удалением widget из layout

Хочу загружать в layout только выбранный сформированный виджет из контейнера, который заполняется в конструкторе класса MainWindow

105
Как рендерить подобие окон

Как рендерить подобие окон

В общем, я создаю игру, в которой у меня будет подобие операционной системыВ ней можно открывать, перетаскивать и выполнять прочие манипуляции...

121
Не выходит изменить размер квадратов в фиксированном поле, исходя из количества всех его клеток

Не выходит изменить размер квадратов в фиксированном поле, исходя из количества всех его клеток

У меня есть квадратное поле, которое я разбиваю на клетки, но размер этих клеток фиксирован и при небольшом количестве строк и столбцов на поле,...

105