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