C++ pair类模板的用法(附带实例)
pair 是一个简单的结构体类模板,它有两个成员变量 first 和 second,作用是创建“键值对”形式的元素 <first, second>。
pair 类的定义形式如下:
pair 对象可作为关联式容器的元素,下面就来看看如何生成一个 pair 对象。注意,pair 类模板定义在 <utility> 头文件中,使用前需要先引入该头文件。
2) 定义 pair 类对象的同时进行初始化。例如,创建 pair 对象 name_age,两个元素分别是 string 和 int 类型,其中 first 成员初始化为“王小明”,second 成员初始化为“19”,代码如下:
3) 使用复制构造函数,用已有的 pair 对象创建新对象。例如,创建 pair 对象 name_age2,其值与 name_age 一样,代码如下:
4) 定义多个 pair 对象,使用 typedef 简化类型声明。例如,用 Author 表示 pair<string, string> 类型,然后定义两个 pair 对象,代码如下:
5) 两个对象相互赋值。例如,定义并初始化 pair 对象 p1,定义 pair 对象 p2 和 p3,值都为 p1 的值,代码如下:
利用模板函数 make_pair() 可以快速生成一个 pair 对象,且可以省去两个变量分别赋值的麻烦。因此,上面的代码可简化为:
例如,创建 pair 对象 stuage,用 make_pair() 函数定义数值,代码如下:
【实例】 pair 对象的创建和初始化。使用不同的方式初始化 pair 对象并输出其值,代码如下:
因为未对 p1 初始化,输出结果为默认值 0。创建 p4 对象时调用了 make_pair() 函数,该语句还可以改写为如下形式:
如果两个 pair 对象对应键、值的数据类型相同,还可以对它们进行比较。pair 对象重载了 <、<=、>、>=、==、!= 这 6 个运算符,比较规则为:先比较 pair.first 元素的大小,如果相等,则继续比较 pair.second 元素的大小。
【实例】通过比较运算符,比较两个 pair 对象。代码如下:
pair 类的定义形式如下:
template <class T1, class T2> struct pair;其中,T1 是第一个值的数据类型,T2 是第二个值的数据类型。两者可以相同,也可以不相同。
pair 对象可作为关联式容器的元素,下面就来看看如何生成一个 pair 对象。注意,pair 类模板定义在 <utility> 头文件中,使用前需要先引入该头文件。
C++ pair对象的定义与初始化
1) 定义空的 pair 对象,不进行初始化。例如:pair<string, int> p1; pair<string, vector<int>> pa;
2) 定义 pair 类对象的同时进行初始化。例如,创建 pair 对象 name_age,两个元素分别是 string 和 int 类型,其中 first 成员初始化为“王小明”,second 成员初始化为“19”,代码如下:
pair< string, int> name_age("王小明", 19);
3) 使用复制构造函数,用已有的 pair 对象创建新对象。例如,创建 pair 对象 name_age2,其值与 name_age 一样,代码如下:
pair< string, int> name_age2(name_age);
4) 定义多个 pair 对象,使用 typedef 简化类型声明。例如,用 Author 表示 pair<string, string> 类型,然后定义两个 pair 对象,代码如下:
Author 开发部("王","小明"); Author 设计部("张","立");
5) 两个对象相互赋值。例如,定义并初始化 pair 对象 p1,定义 pair 对象 p2 和 p3,值都为 p1 的值,代码如下:
pair< int, double> p1(1, 1.8); pair< int, double> p2=p1; pair< int, double> p3; p3 = p1;
C++ pair对象成员的赋值
pair 对象中,两个成员变量需要分别进行访问赋值。例如:pair<int,double> p1; p1.first = 10; p1.second = 2.5;
利用模板函数 make_pair() 可以快速生成一个 pair 对象,且可以省去两个变量分别赋值的麻烦。因此,上面的代码可简化为:
pair<int,double> p1; p=make_pair(10,2.5);
例如,创建 pair 对象 stuage,用 make_pair() 函数定义数值,代码如下:
string s = "王小明";输出结果为“王小明 19”。
【实例】 pair 对象的创建和初始化。使用不同的方式初始化 pair 对象并输出其值,代码如下:
#include <iostream> #include <utility> // 引入 utility 头文件 #include <string> // 引入 string 头文件 using namespace std; int main() { pair<string, double> p1; // 定义 p1 对象,但不进行初始化 pair<string, string> p2("C语言", "中文网"); // 定义并初始化 p2 对象 pair<string, string> p3(p2); // 创建 p3 对象,其值与 p2 一样 pair<string, string> p4; // 定义 p4 对象 p4 = make_pair("C 语言", "入门教程"); // 使用 make_pair() 为 p4 赋值 cout << "p1: " << p1.first << " " << p1.second << endl; cout << "p2: " << p2.first << " " << p2.second << endl; cout << "p3: " << p3.first << " " << p3.second << endl; cout << "p4: " << p4.first << " " << p4.second << endl; return 0; }运行结果为:
p1: 0
p2: C语言 中文网
p3: C语言 中文网
p4: C 语言 入门教程
因为未对 p1 初始化,输出结果为默认值 0。创建 p4 对象时调用了 make_pair() 函数,该语句还可以改写为如下形式:
pair <string, string> p4 = make_pair("C语言", "入门教程");
如果两个 pair 对象对应键、值的数据类型相同,还可以对它们进行比较。pair 对象重载了 <、<=、>、>=、==、!= 这 6 个运算符,比较规则为:先比较 pair.first 元素的大小,如果相等,则继续比较 pair.second 元素的大小。
【实例】通过比较运算符,比较两个 pair 对象。代码如下:
#include <iostream> #include <utility> #include <string> using namespace std; int main() { pair<string, int> p1("张慧慧", 20); pair<string, int> p2("刘紫婷", 20); pair<string, int> p3("张慧慧", 30); pair<string, int> p4("刘紫婷", 20); if (p1 != p2) // p1 和 p2 的 key 不同,value 相同 cout << "p1 != p2" << endl; if (p1 != p3) // p1 和 p3 的 key 相同,value 不同 cout << "p1 != p3" << endl; if (p2 == p4) // p2 和 p4 的 key 相同,value 相同 cout << "p2 == p4" << endl; return 0; }运行结果为:
p1 != p2
p1 != p3
p2 == p4