如果我们需要向 STL 中的 unordered_map 容器插入元素有三种方法,即,使用下标索引的形式和使用 insert 方法插入元素还可以使用 emplace 方法。
unordered_map[key] = value
参数 | 说明 |
---|---|
unordered_map | 需要插入值的 unordered_map。 |
key | 需要插入的键。 |
value | 需要插入的值。 |
如果键 key 不存在,则插入键和对应的值,否则,会将键 key 的值更新为 value。
//以普通方式传递参数
pair<iterator,bool> insert ( const value_type& val );
//以右值引用的方式传递参数
template <class P>
pair<iterator,bool> insert ( P&& val );
参数 | 说明 |
---|---|
val | 需要插入的键。 |
insert() 方法可以将 pair 类型 的键值对元素添加到 unordered_map 容器中。
以上 2 种格式中,参数 val 表示要添加到容器中的目标键值对元素;该方法的返回值为 pair 类型值,内部包含一个 iterator 迭代器和 bool 变量:
//以普通方式传递 val 参数
iterator insert ( const_iterator hint, const value_type& val );
//以右值引用方法传递 val 参数
template <class P>
iterator insert ( const_iterator hint, P&& val );
insert() 方法还可以指定新键值对要添加到容器中的位置。
以上 2 种语法格式中,hint 参数为迭代器,用于指定新键值对要添加到容器中的位置;val 参数指的是要添加容器中的键值对;方法的返回值为迭代器:
注意,以上 2 种语法格式中,虽然通过 hint 参数指定了新键值对添加到容器中的位置,但该键值对真正存储的位置,并不是 hint 参数说了算,最终的存储位置仍取决于该键值对的键的值。
使用下标索引给 unordered_map 插入元素
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
unordered_map<string, string> unordered_map1{{"name", "haicoder"}, {"url", "haicoder.net"}};
unordered_map1["online"] = "yes";
for (auto iter = unordered_map1.begin(); iter != unordered_map1.end(); ++iter)
{
cout << iter->first << " " << iter->second << endl;
}
return 0;
}
因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ unordered_map.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们看到,我们使用了下标索引的方式将元素插入到了 unordered_map 中。
使用 insert 给 unordered_map 插入元素
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
//创建一个空 unordered_map 容器
std::unordered_map<string, string> myunordered_map;
//创建一个真实存在的键值对变量
std::pair<string, string> CPP = { "C++教程", "https://haicoder.net/cpp/cpp-tutorial.html" };
//创建一个接收 insert() 方法返回值的 pair 对象
std::pair<std::unordered_map<string, string>::iterator, bool> ret;
//插入CPP,由于CPP并不是临时变量,因此会以第一种方式传参
ret = myunordered_map.insert(CPP);
cout << "ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl;
//以右值引用的方式传递临时的键值对变量
ret = myunordered_map.insert({ "golang","https://haicoder.net/golang/golang-tutorial.html" });
cout << "ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl;
//插入失败样例
ret = myunordered_map.insert({ "C++教程","https://haicoder.net/cpp/cpp-tutorial.html" });
cout << "ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl;
return 0;
}
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们看到,我们使用了 insert 将元素插入到了 unordered_map 中。
如果我们需要向 STL 中的 unordered_map 容器插入元素有三种方法,即,使用下标索引的形式和使用 insert 方法插入元素还可以使用 emplace 方法。