当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。