unordered_map emplace () в C ++ STL
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» - нет.