📜  C++ STL中的unordered_map emplace()

📅  最后修改于: 2021-05-30 06:08:01             🧑  作者: Mango

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等的更多准备工作,请参阅“完整面试准备课程”