Карточка Middle Контейнеры STL изнутри обновлено

try_emplace и insert_or_assign

Вопрос

Чем try_emplace и insert_or_assign отличаются от insert у std::map?

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

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

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

Коротко

insert не трогает существующий ключ. tryemplace(k, args...) тоже не трогает, но и не конструирует значение (аргументы не перемещаются впустую), если ключ уже есть. insertorassign(k, v) вставляет или перезаписывает. Оба из C++17.

Ответ

insert не трогает существующий ключ. try_emplace(k, args...) тоже не трогает, но и не конструирует значение (аргументы не перемещаются впустую), если ключ уже есть. insert_or_assign(k, v) вставляет или перезаписывает. Оба из C++17.

Разбор

insert не трогает существующий ключ. try_emplace(k, args...) тоже не трогает, но и не конструирует значение (аргументы не перемещаются впустую), если ключ уже есть. insert_or_assign(k, v) вставляет или перезаписывает. Оба из C++17.

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

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