unordered_map :: emplace()是C++ STL中的内置函数,它将键及其元素插入到unordered_map容器中。它可以有效地将容器尺寸增加一倍。如果多次放置同一个键,则映射仅存储第一个元素,因为映射是不存储多个相同值的键的容器。
它与unordered_map insert()有何不同?
emplace的优点是,它可以就地插入并且避免了不必要的对象复制。对于原始数据类型,我们使用哪种类型都没有关系。有关详细信息,请参考此内容。
句法:
unordered_map_name.emplace(key, element)
参数:该函数接受两个强制性参数,如下所述:
- key –指定要在多图容器中插入的键。
- element –指定要插入地图容器的键的元素。
返回值:返回一对迭代器和一个布尔值。如果元素已经存在,则返回指向已插入元素的迭代器,如果元素不存在,则将迭代器返回至新添加的容器。布尔值表示插入是否发生。
下面的程序说明了emplace函数的工作方式:
范例1:
// C++ program for the illustration of
// unordered_map::emplace() function
#include
using namespace std;
int main()
{
// initialize container
unordered_map 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
using namespace std;
int main()
{
string str = "geeksforgeeks";
unordered_map 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”在字符串1st的索引“ 0”处出现两次,然后在索引“ 8”处发生,但是在给定键唯一之前,emplace函数不允许我们将其保存在unordered_map中。这就是为什么保存“ 0”而没有保存“ 8”的原因。
同样,对于“ e”,将保存“ 1”,而不会保存“ 2”,“ 9”,“ 10”。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。