在C++ STL中的unordered_map emplace()

在C++ STL中的unordered_map emplace()

unordered_map::emplace() 是C++ STL中的内置函数,它将键和其元素插入到unordered_map容器中。它有效地增加了容器大小。如果同一键被不止一次emplace,那么map仅将第一个元素存储为map是不存储相同值的多个键的容器。

它与unordered_map insert()有何不同? emplace的优点是,它进行原地插入,并避免了对象的不必要复制。对于基元数据类型,我们使用哪种方式并不重要。有关详细信息,请参阅这里。

语法:

unordered_map_name.emplace(key, element)

参数:

  • key - 指定要插入到multimap容器中的键。
  • element - 指定要插入到map容器中的键相应的元素。

返回值 :它返回一个迭代器和一个布尔值对。如果元素已经存在,则返回一个指向已插入元素的迭代器,如果元素不存在,则返回一个指向新添加的容器的迭代器。布尔值表示是否插入了。下面的程序说明了 emplace 函数的工作原理:

示例1:

// C ++程序示例
// unordered_map::emplace()函数
#include <bits/stdc++.h>
using namespace std;

int main()
{

    // 初始化容器
    unordered_map<int, int> mp;

    // 以随机顺序插入元素
    mp.emplace(2, 30);
    mp.emplace(1, 40);
    mp.emplace(2, 20);
    mp.emplace(1, 50);
    mp.emplace(4, 50);

    // 打印元素
    for (auto it = mp.begin(); it != mp.end(); it++)
        cout << it->first << "==>>"
        << it->second << "\n";
}

输出:

4==>>50
2==>>30
1==>>40

示例2 :假设我们要显示字符串中的所有唯一字符及其索引。如果一个字符出现多次,则显示其首次出现的索引。

// C ++程序示例
// unordered_map::emplace()函数
#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”和“8”处,但是emplace函数不允许我们保存到unordered_map中,直到给定的key是唯一的。这就是为什么“0”被保存而“8”被排除。对于“e”,“1”被保存,“2”、“9”和“10”被排除。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程