文章目录 【 1. pair 对象的创建 】 【 2. pair 对象的赋值 】 【 3. pair 对象的比较 】 【 4. pair对象成员的互换】
C++ STL 标准库提供了 pair 类模板,专门用来将 2 个普通元素 first 和 second(可以是 C++ 基本数据类型、结构体、类自定的类型)创建成一个新元素<first, second>。 头文件 <utility>
【 1. pair 对象的创建 】
pair < DataType1, DataType2> pair1;
pair < DataType1, DataType2> pair2 ( DataType1_Value, DataType2_Value) ;
pair < DataType1, DataType2> pair3 ( pair2) ;
移动构造函数(C++ 11 标准新增) 在创建 pair4 对象时,调用了 make_pair() 函数 ,它也是 <utility> 头文件提供的,其功能是 生成一个 pair 对象 。因此,当我们将 make_pair() 函数的返回值(是一个临时对象,这个临时对象是右值,意味着它是一个临时存在的、不可修改的对象)作为参数传递给 pair() 构造函数时,其调用的是移动构造函数,而不是拷贝构造函数。
pair < DataType1, DataType2> pair4 ( make_pair ( DataType1_Value, DataType2_Value) ) ;
pair < DataType1, DataType2> pair4 = make_pair ( DataType1_Value, DataType2_Value) ;
pair < DataType1, DataType2> pair5 ( DataType1 ( DataType1_Value) , DataType2 ( DataType2_Value) ) ;
pair ( piecewise_construct_t pwc, tuple< Args1. . . > first_args, tuple< Args2. . . > second_args) ;
# include <iostream>
# include <string>
using namespace std;
int main ( ) { pair < string, int > pair1; pair < string, string> pair2 ( "baidu" , "http://www.baidu.com" ) ; pair < string, string> pair3 ( pair2) ; pair < string, string> pair4 ( make_pair ( "baidu" , "http://www.baidu.com" ) ) ;
pair < string, string> pair5 ( string ( "baidu" ) , string ( "http://www.baidu.com" ) ) ; cout << "pair1: " << pair1. first << " " << pair1. second << endl; cout << "pair2: " << pair2. first << " " << pair2. second << endl; cout << "pair3: " << pair3. first << " " << pair3. second << endl; cout << "pair4: " << pair4. first << " " << pair4. second << endl; cout << "pair5: " << pair5. first << " " << pair5. second << endl; return 0 ;
}
【 2. pair 对象的赋值 】
pair1. first = "baidu" ;
pair1. second = 34 ;
【 3. pair 对象的比较 】
注意:对于 进行比较的 2 个 pair 对象,其对应的键和值的类型必须相同 ,否则将没有可比性 同时 编译器提示没有相匹配的运算符,即找不到合适的重载运算符。 <utility> 头文件中除了提供创建 pair 对象的方法之外,还为 pair 对象重载了 <、<=、>、>=、==、!= 这 6 种运算符 ,其运算规则是:对于进行比较的 2 个 pair 对象,先比较 pair.first 元素的大小,如果相等则继续比较 pair.second 元素的大小 。 实例
# include <iostream>
# include <utility>
# include <string>
using namespace std;
int main ( ) { pair < string, int > pair1 ( "STL教程" , 20 ) ; pair < string, int > pair2 ( "C++教程" , 20 ) ; pair < string, int > pair3 ( "C++教程" , 30 ) ; if ( pair1 != pair2) { cout << "pair != pair2" << endl; } if ( pair2 != pair3) { cout << "pair2 != pair3" << endl; } return 0 ;
}
【 4. pair对象成员的互换】
pair类模板还提供有一个 swap() 成员函数 ,能够 互换 2 个 pair 对象的键值对 ,其操作成功的 前提是这 2 个 pair 对象的键和值的类型要相同 。 实例
# include <iostream>
# include <utility>
# include <string>
using namespace std;
int main ( ) { pair < string, int > pair1 ( "pair" , 10 ) ; pair < string, int > pair2 ( "pair2" , 20 ) ; pair1. swap ( pair2) ; cout << "pair1: " << pair1. first << " " << pair1. second << endl; cout << "pair2: " << pair2. first << " " << pair2. second << endl; return 0 ;
}