STL unordered_map插入元素

STL unordered_map插入元素教程

如果我们需要向 STL 中的 unordered_map 容器插入元素有三种方法,即,使用下标索引的形式和使用 insert 方法插入元素还可以使用 emplace 方法。

STL unordered_map索引插入元素详解

语法

unordered_map[key] = value

参数

参数 说明
unordered_map 需要插入值的 unordered_map。
key 需要插入的键。
value 需要插入的值。

说明

如果键 key 不存在,则插入键和对应的值,否则,会将键 key 的值更新为 value。

STL unordered_map insert插入元素详解

语法

//以普通方式传递参数 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 变量:

  • 当 insert() 将 val 成功添加到容器中时,返回的迭代器指向新添加的键值对,bool 值为 True;
  • 当 insert() 添加键值对失败时,意味着当前容器中本就存储有和要添加键值对的键相等的键值对,这种情况下,返回的迭代器将指向这个导致插入操作失败的迭代器,bool 值为 False。

STL unordered_map insert插入元素详解

语法

//以普通方式传递 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 参数指的是要添加容器中的键值对;方法的返回值为迭代器:

  • 如果 insert() 方法成功添加键值对,该迭代器指向新添加的键值对;
  • 如果 insert() 方法添加键值对失败,则表示容器中本就包含有相同键的键值对,该方法返回的迭代器就指向容器中键相同的键值对;

注意,以上 2 种语法格式中,虽然通过 hint 参数指定了新键值对添加到容器中的位置,但该键值对真正存储的位置,并不是 hint 参数说了算,最终的存储位置仍取决于该键值对的键的值。

案例

unordered_map下标索引插入元素

使用下标索引给 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,如下图所示:

10_unordered_map插入元素.png

我们看到,我们使用了下标索引的方式将元素插入到了 unordered_map 中。

unordered_map insert插入元素

使用 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,如下图所示:

11_unordered_map插入元素.png

我们看到,我们使用了 insert 将元素插入到了 unordered_map 中。

STL unordered_map插入元素总结

如果我们需要向 STL 中的 unordered_map 容器插入元素有三种方法,即,使用下标索引的形式和使用 insert 方法插入元素还可以使用 emplace 方法。