unordered_map::emplace()是C++ STL中的內置函數,該函數將鍵及其元素插入unordered_map容器中。有效地將容器尺寸增加了一個。如果多次放置同一個鍵,則映射僅存儲第一個元素,因為映射是不存儲多個相同值的鍵的容器。
有什麽不同unordered_map insert()?
emplace的優點是,它可以就地插入並且避免了不必要的對象複製。對於原始數據類型,使用哪種類型都沒有關係。有關詳細信息,請參考此內容。
用法:
unordered_map_name.emplace(key, element)
參數:該函數接受兩個強製性參數,如下所述:
- key -指定要在多圖容器中插入的鍵。
- element -指定要插入Map容器的鍵元素。
返回值:它返回一對迭代器和一個布爾值。如果元素已經存在,則返回指向已插入元素的迭代器,如果元素不存在,則將迭代器返回至新添加的容器。布爾值表示插入是否發生。
以下示例程序旨在說明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 << "\n";
}
輸出:
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 << "\n";
}
輸出:
r==>>7 e==>>1 s==>>4 g==>>0 k==>>3 f==>>5 o==>>6
說明:“g”在字符串“0”的字符串1中出現2次,然後在索引“8”出現2次,但是在給定鍵唯一之前,Emplace函數不允許我們將其保存在unordered_map中。這就是為什麽保存“0”而沒有保存“8”的原因。
同樣,對於“e”,保存了“1”,但沒有保存“2”,“9”,“10”。
相關用法
- C++ map emplace()用法及代碼示例
- C++ set::emplace()用法及代碼示例
- C++ stack emplace()用法及代碼示例
- C++ multimap::emplace()用法及代碼示例
- C++ deque emplace用法及代碼示例
- C++ multiset::emplace()用法及代碼示例
- C++ priority_queue emplace()用法及代碼示例
- C++ queue::emplace()用法及代碼示例
- C++ unordered_multimap emplace()用法及代碼示例
- C++ list emplace()用法及代碼示例
- C++ unordered_set emplace()用法及代碼示例
- C++ unordered_multiset emplace()用法及代碼示例
- C++ vector emplace()用法及代碼示例
注:本文由純淨天空篩選整理自DrRoot_大神的英文原創作品 unordered_map emplace() in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。