Метод emplace
Метод emplace класса map вставляет новый элемент в контейнер.
Главная особенность этого метода заключается в том, что он конструирует
элемент непосредственно внутри контейнера, не создавая временный объект
pair. Это позволяет избежать лишнего копирования или перемещения.
Первым параметром метод принимает ключ, а последующими параметрами -
аргументы для конструирования значения. Метод возвращает пару, состоящую
из итератора на вставленный (или уже существующий) элемент и логического
значения, которое показывает, произошла ли вставка на самом деле.
Синтаксис
m.emplace(key, args...)
Пример
Давайте вставим в словарь map новый элемент с ключом "a"
и значением 1, сконструировав его прямо на месте:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m;
auto res = m.emplace("a", 1);
cout << res.second << endl;
cout << m["a"] << endl;
return 0;
}
Результат выполнения кода:
1
1
Пример
Если элемент с таким ключом уже существует, метод emplace
не станет его перезаписывать. Давайте попробуем вставить элемент
с уже существующим ключом:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m;
m.emplace("a", 1);
auto res = m.emplace("a", 2);
cout << res.second << endl;
cout << m["a"] << endl;
return 0;
}
Результат выполнения кода:
0
1
Пример
Давайте заполним словарь несколькими парами ключ-значение и выведем его содержимое на экран:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m;
m.emplace("a", 1);
m.emplace("b", 2);
m.emplace("c", 3);
for (auto el : m) {
cout << el.first << " " << el.second << endl;
}
return 0;
}
Результат выполнения кода:
"a 1"
"b 2"
"c 3"
Смотрите также
-
метод
insert,
который вставляет элементы в словарь -
метод
try_emplace,
который вставляет элемент только если ключа еще нет -
метод
insert_or_assign,
который вставляет или перезаписывает элемент -
метод
erase,
который удаляет элементы из словаря