unordered_map emplace () в C ++ STL

Опубликовано: 2 Декабря, 2021

Unordered_map :: emplace () - это встроенная функция в C ++ STL, которая вставляет ключ и его элемент в контейнер unordered_map. Это эффективно увеличивает размер контейнера на единицу. Если один и тот же ключ вставлен более одного раза, карта сохраняет только первый элемент, поскольку карта является контейнером, который не хранит несколько ключей с одним и тем же значением.

Чем он отличается от unordered_map insert ()?
Преимущество emplace в том, что он выполняет вставку на месте и позволяет избежать ненужной копии объекта. Для примитивных типов данных не имеет значения, какой из них мы используем. Пожалуйста, обратитесь к этому за подробностями.


Синтаксис:

unordered_map_name.emplace (ключ, элемент)

Параметры: функция принимает два обязательных параметра, которые описаны ниже:

  • key - указывает ключ, который будет вставлен в контейнер мульти-карты.
  • element - указывает элемент ключа, который должен быть вставлен в контейнер карты.

Возвращаемые значения : возвращает пару итератора и логического значения. Если элемент уже существует, он возвращает итератор, указывающий на уже вставленный элемент, а если элемент не существует, он возвращает итератор во вновь добавленный контейнер. Bool показывает, произошла ли вставка.

Программа ниже иллюстрирует работу функции emplace:

Пример 1:

// C++ program for the illustration of
// unordered_map::emplace() function
#include <bits/stdc++.h>
using namespace std;
int main()
{
// initialize container
unordered_map< int , int > mp;
// insert elements in random order
mp.emplace(2, 30);
mp.emplace(1, 40);
mp.emplace(2, 20);
mp.emplace(1, 50);
mp.emplace(4, 50);
// prints the elements
for ( auto it = mp.begin(); it != mp.end(); it++)
cout << it->first << "==>>"
<< it->second << " " ;
}
Выход:
4 == >> 50
2 == >> 30
1 == >> 40

Пример 2 : Допустим, мы хотим отобразить все уникальные символы с индексами для строки. Если символ появляется несколько раз, отобразите индекс, по которому он появился первым.

// C++ program for the illustration of
// unordered_map::emplace() function
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str = "geeksforgeeks" ;
unordered_map< char , int > mp;
for ( int i = 0; i < str.length(); i++)
mp.emplace(str[i], i);
for ( auto it = mp.begin(); it != mp.end(); it++)
cout << it->first << "==>>" << it->second << " " ;
}
Выход:
г == >> 7
е == >> 1
s == >> 4
г == >> 0
к == >> 3
f == >> 5
о == >> 6

Объяснение: «g» встречается 2 раза в строке 1-й с индексом «0», а затем с индексом «8», но функция emplace не позволяет нам сохранять в unordered_map, пока данный ключ не станет уникальным. Поэтому «0» сохраняется, а «8» - нет.
Аналогично для «e» сохраняется «1», а «2», «9», «10» - нет.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .