Метод emplace
Метод emplace класса unordered_map вставляет новый элемент в контейнер, конструируя его непосредственно на месте, без создания временного объекта. В отличие от метода insert, который принимает уже готовую пару, emplace принимает аргументы для конструктора элемента и создаёт его прямо внутри контейнера, что может быть эффективнее.
Первым параметром метод принимает ключ элемента. Последующие параметры передаются конструктору значения. Метод возвращает пару, первый элемент которой является итератором на вставленный или уже существующий элемент, а второй - логическим значением, указывающим, была ли вставка успешной.
Синтаксис
umap.emplace(key, args...)
Пример
Давайте вставим элемент в unordered_map с ключом 1 и значением "abcde":
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main()
{
unordered_map<int, string> umap;
auto res = umap.emplace(1, "abcde");
cout << res.first->first << " " << res.first->second << endl;
cout << res.second << endl;
return 0;
}
Результат выполнения кода:
"1 abcde"
1
Пример
Давайте попробуем вставить элемент с уже существующим ключом 1 и посмотрим на результат:
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main()
{
unordered_map<int, string> umap;
umap.emplace(1, "abcde");
auto res = umap.emplace(1, "12345");
cout << res.first->first << " " << res.first->second << endl;
cout << res.second << endl;
return 0;
}
Результат выполнения кода:
"1 abcde"
0
Пример
Давайте вставим несколько элементов и выведем их на экран:
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main()
{
unordered_map<int, string> umap;
umap.emplace(1, "abcde");
umap.emplace(2, "12345");
umap.emplace(3, "abcde");
for (const auto& pair : umap)
{
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
"3 abcde"
2 12345
"1 abcde"
Смотрите также
-
класс
unordered_map,
который представляет собой хеш-таблицу -
метод
insert,
который вставляет элементы в контейнер -
метод
erase,
который удаляет элементы из контейнера -
метод
find,
который ищет элемент по ключу