Выбор ответа Junior Контейнеры STL изнутри спрашивают часто обновлено

Чтение через operator[]

Вопрос

Что делает if (counts[name] > 0) для std::map<std::string, int> counts, если ключа name нет?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вставляет name со значением 0 и сравнивает 0 0. operator[] всегда возвращает ссылку на значение и при отсутствии ключа создаёт элемент со значением по умолчанию.

Варианты ответа

  1. Бросает std::out_of_range, так как ключа нет
  2. Возвращает 0 по умолчанию, не меняя содержимое map
  3. Вставляет name со значением 0 и сравнивает 0 > 0правильный ответ
  4. Неопределённое поведение: читается неинициализированный int

Разбор

operator[] всегда возвращает ссылку на значение и при отсутствии ключа создаёт элемент со значением по умолчанию. Поэтому он недоступен для const map, а при чтении раздувает контейнер. Для чтения: find, contains (C++20) или at.

  • Исключение бросает at.
  • Без вставки ведут себя find и contains.
  • Поведение определено.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.