當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ unordered_map emplace()用法及代碼示例


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”。



相關用法


注:本文由純淨天空篩選整理自DrRoot_大神的英文原創作品 unordered_map emplace() in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。