#c #dictionary
#c #словарь
Вопрос:
Каков стандартный способ обработки попытки вставить ключ в карту, которая уже содержит этот ключ?
-
Должна ли выдаваться ошибка?
-
Должна ли функция вставки просто возвращаться без добавления пары ключ / значение?
-
Должна ли функция вставки удалять уже существующую пару ключ / значение и вставлять новую пару ключ / значение?
Спасибо 🙂
Ответ №1:
std::map::insert
возвращает пару (итератор, логическое значение). Если ключ отсутствовал, он вставляется с заданным значением, и функция возвращает итератор для него и true
во втором компоненте.
Если ключ уже присутствовал, старое значение сохраняется. Функция возвращает итератор к существующему элементу и false
во втором компоненте.
Начиная с C 17, std::map
также предоставляет insert_or_assign
функцию-член. Он ведет себя так же, за исключением того, что старое значение заменяется новым значением, когда ключ уже присутствует.
Комментарии:
1. Привет, Игорь. Большое спасибо. Это действительно помогает 🙂
2.
insert_or_assign
… из моих дней хранимых процедур SQL мы бы назвали этоupsert
, но это, вероятно, слишком причудливо для комитета в наши дни.3. Insert_or_assign довольно неуклюж в сравнении