#c
Вопрос:
У меня есть неупорядоченная карта счетчиков, например:
std::unordered_map<std::string, std::size_t> counters_;
Нужно ли мне вручную создавать значение, прежде чем пытаться увеличить его? Будет ли следующая строка считаться неопределенным поведением?
std::unordered_map<std::string, std::size_t> counters_;
counters_["non_existing_key"] = 1;
Комментарии:
1.
[]
Оператор всегда будет создавать значение «сконструировано по умолчанию», если его не существует. Для целочисленных типов это означает, что значение будет равно нулю. Таким образом, код будет работать так, как вы надеетесь.
Ответ №1:
Используя std::map::operator[]
это , вы создаете новое значение на карте, если оно раньше не существовало. Кроме того, новое значение будет инициализировано значением, поэтому увеличение значения четко определено.