Выбор ответа Junior Контейнеры STL изнутри спрашивают часто обновлено
Чтение через operator[]
Вопрос
Что делает if (counts[name] > 0) для std::map<std::string, int> counts, если ключа name нет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вставляет name со значением 0 и сравнивает 0 0. operator[] всегда возвращает ссылку на значение и при отсутствии ключа создаёт элемент со значением по умолчанию.
Варианты ответа
- Бросает
std::out_of_range, так как ключа нет - Возвращает 0 по умолчанию, не меняя содержимое map
- Вставляет
nameсо значением 0 и сравнивает 0 > 0правильный ответ - Неопределённое поведение: читается неинициализированный
int
Разбор
operator[] всегда возвращает ссылку на значение и при отсутствии ключа создаёт элемент со значением по умолчанию. Поэтому он недоступен для const map, а при чтении раздувает контейнер. Для чтения: find, contains (C++20) или at.
- Исключение бросает
at. - Без вставки ведут себя
findиcontains. - Поведение определено.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.