stl 的 map 容器很多读者应该都很熟悉,map 容器提供了一个 insert 方法,我们用该方法向 map 中插入元素,但是应该很少有人记得 insert 方法的返回值是什么类型,让我们来看一下 C++98/03 提供的 insert 方法的签名:
std::pair<iterator,bool> insert( const value_type& value );
这里我们仅关心其返回值,这个返回值是一个 std::pair<T1, T2> 类型,由于 map 中的元素的 key 不允许重复,所以如果 insert 方法调用成功,T1 是被成功插入到 map 中的元素的迭代器,T2 的类型为 bool,此时其值为 true(表示插入成功);如果 insert 由于 key 重复,T1 是造成 insert 插入失败、已经存在于 map 中的元素的迭代器,此时 T2 的值为 false(表示插入失败)。
在 C++98/03 标准中我们可以使用 std::pair<T1, T2> 的 first 和 second 属性来分别引用 T1 和 T2 的值。如下面的我们熟悉的代码所示:
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<std::string, int> cities;
cities["beijing"] = 0;
cities["shanghai"] = 1;
cities["shenzhen"] = 2;
cities["guangzhou"] = 3;
//for (const auto& [key, value] : m)
//{
// std::cout << key << ": " << value << std::endl;
//}
//这一行在 C++11 之前写法实在太麻烦了,
//std::pair<std::map<std::string, int>::iterator, int> insertResult = cities.insert(std::pair<std::string, int>("shanghai", 2));
//C++ 11中我们写成:
auto insertResult = cities.insert(std::pair<std::string, int