首页 > 编程笔记 > C++笔记 阅读:1

C++ pair类模板的用法(附带实例)

pair 是一个简单的结构体类模板,它有两个成员变量 first 和 second,作用是创建“键值对”形式的元素 <first, second>。

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

相关文章