РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
263 of 815 menu

Метод try_emplace

Метод try_emplace класса map вставляет новый элемент в контейнер, но только в том случае, если элемента с таким ключом еще нет. Если ключ уже присутствует в контейнере, метод ничего не делает и не изменяет существующее значение. Первым параметром метод принимает ключ, а следующими параметрами - аргументы для конструктора значения. В отличие от метода insert, который может копировать или перемещать объект, try_emplace создает значение непосредственно в контейнере, что позволяет избежать лишних копирований.

Синтаксис

map.try_emplace(key, args...)

Пример

Давайте создадим map и попробуем вставить элемент с ключом "b", которого еще нет в контейнере:

#include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, int> mp = {{"a", 1}, {"c", 3}}; auto [it, inserted] = mp.try_emplace("b", 2); cout << "inserted: " << inserted << endl; cout << "key: " << it->first << ", value: " << it->second << endl; return 0; }

Результат выполнения кода:

"inserted: 1" "key: b, value: 2"

Пример

Теперь попробуем вставить элемент с ключом "a", который уже существует в контейнере. Значение при этом не должно измениться:

#include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, int> mp = {{"a", 1}, {"c", 3}}; auto [it, inserted] = mp.try_emplace("a", 99); cout << "inserted: " << inserted << endl; cout << "key: " << it->first << ", value: " << it->second << endl; return 0; }

Результат выполнения кода:

"inserted: 0" "key: a, value: 1"

Пример

Давайте переберем все элементы map после нескольких вызовов try_emplace, чтобы убедиться, что существующие значения не перезаписались:

#include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, int> mp = {{"a", 1}, {"c", 3}}; mp.try_emplace("b", 2); mp.try_emplace("a", 99); mp.try_emplace("d", 4); for (const auto& [key, value] : mp) { cout << key << ": " << value << endl; } return 0; }

Результат выполнения кода:

"a: 1" "b: 2" "c: 3" "d: 4"

Смотрите также

  • класс map,
    который хранит пары ключ-значение
  • метод insert,
    который вставляет элементы в map
  • метод emplace,
    который создает элемент прямо в контейнере
  • метод insert_or_assign,
    который вставляет или перезаписывает значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить