C++ STL pair用法详解
我们知道,关联式容器存储的是“键值对”形式的数据,比如:
<"C语言教程", "http://c.biancheng网站站点" rel="nofollow" /> #1) 默认构造函数,即创建空的 pair 对象 pair(); #2) 直接使用 2 个元素初始化成 pair 对象 pair (const first_type& a, const second_type& b); #3) 拷贝()构造函数,即借助另一个 pair 对象,创建新的 pair 对象 template<class U, class V> pair (const pair<U,V>& pr);<first, second>
。通过其构成的元素格式不难看出,使用 pair 类模板来创建“键值对”形式的元素,再适不过。
注意,pair 类模板定义在<utility>
头文件中,所以在使用该类模板之前,需引入此头文件。另外值得一提的是,在 C++ 11 标准之前,pair 类模板中提供了以下 3 种构造函数:
在 C++ 11 标准中,在引入右值引用的基础上,pair 类模板中又增添了如下 2 个构造函数:
#4) 移动构造函数
template<class U, class V> pair (pair<U,V>&& pr);
#5) 使用右值引用参数,创建 pair 对象
template<class U, class V> pair (U&& a, V&& b);
下面程序演示了以上几种创建 pair 对象的方法:除此之外,C++ 11 标准中 pair 类模板还新增加了如下一种构造函数:
pair (piecewise_construct_t pwc, tuple<Args1...> first_args, tuple<Args2...> second_args);
,该构造 pair 类模板的方式很少用到,因此本节不再对其进行详细介绍,感兴趣的读者可自行查阅资料。
#include <iostream>
#include <utility> // pair
#include <string> // string
using namespace std;
int main() {
// 调用构造函数 1,也就是默认构造函数
pair <string, double> pair1;
// 调用第 2 种构造函数
pair <string, string> pair2("STL教程","http://c.biancheng网站站点" rel="nofollow" />
pair1: 0
pair2: STL教程 http://c.biancheng网站站点" rel="nofollow" />pair1.first = "Java教程";
pair1.second = "http://c.biancheng网站站点" rel="nofollow" />
new pair1: Java教程 http://c.biancheng网站站点" rel="nofollow" />
pair <string, string> pair4 = make_pair("C++教程", "http://c.biancheng网站站点" rel="nofollow" />
#include <iostream>
#include <utility> // pair
#include <string> // string
using namespace std;
int main() {
pair <string, int> pair1("STL教程", 20);
pair <string, int> pair2("C++教程", 20);
pair <string, int> pair3("C++教程", 30);
//pair1和pair2的key不同,value相同
if (pair1 != pair2) {
cout << "pair != pair2" << endl;
}
//pair2和pair3的key相同,value不同
if (pair2 != pair3) {
cout << "pair2 != pair3" << endl;
}
return 0;
}
程序执行结果为:
pair != pair2
pair2 != pair3
需要指出的是,pair类模板还提供有一个 swap() 成员函数,能够互换 2 个 pair 对象的键值对,其操作成功的前提是这 2 个 pair 对象的键和值的类型要相同。例如:
#include <iostream>
#include <utility> // pair
#include <string> // string
using namespace std;
int main() {
pair <string, int> pair1("pair", 10);
pair <string, int> pair2("pair2", 20);
//交换 pair1 和 pair2 的键值对
pair1.swap(pair2);
cout << "pair1: " << pair1.first << " " << pair1.second << endl;
cout << "pair2: " << pair2.first << " " << pair2.second << endl;
return 0;
}
程序执行结果为:
pair1: pair2 20
pair2: pair 10