欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

C 进阶pair容器

终极管理员 知识笔记 125阅读

个人主页Weraphael
✍作者简介目前学习C和算法
✈️专栏C航路
希望大家多多支持咱一起进步
如果文章对你有帮助的话
欢迎 评论 点赞 收藏 加关注✨

目录 一、什么是pair二、pair的初始化三、pair的大小比较四、make_pair函数

一、什么是pair

假设我想打包两种数据第一个是学生的姓名第二个是学生的学号我们就可以写出如下结构体

#include <string>struct Student{std::string _name; // 名字int _id; // 学号};

像这样只打包两种数据我们就可以使用std::pairpair的中文意思一对也就是说它只能保存一对数据

pair是C已经定义好的结构体同时也是一个类模板并且使用前需要加上头文件<utility>

【pair部分源码】

template <class T1, class T2>struct pair{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): first(T1()), second(T2()){}pair(const T1& a, const T2& b): first(a), second(b){}}

通过以上源码我们发现pair有两个公有成员变量分别是firstsecond。并且它们可以直接在类外被使用。

【声明方式】

类模板实例化对象需要加上<>

std::pair<第一个数据类型,第二个数据类型> 变量名

接下来我用代码演示 一下刚才的学生结构体

#include <iostream>#include <utility>#include <string>int main(){    // 第一个数据类型为string表示学生的姓名    // 第二个数据类型为int,表示学生的学号    std::pair<std::string, int> stu;    stu.first  Weraphael;    stu.second  2022;    std::cout << 姓名: << stu.first << std::endl;    std::cout << 学号: << stu.second << std::endl;    return 0;}

【运行结果】

二、pair的初始化

pair常见的初始化是以上第一种和第二种分别是默认构造和拷贝构造

注意如果使用默认构造函数初始化其成员变量firstsecond的值是0如果是string就是空字符串 除此之外还有第三种初始化方式
std::pair<类型1, 类型2> 变量名(第一个数据的初始值, 第二个数据的初始值);// 对应的类型一定要匹配

【代码演示】

#include <iostream>#include <utility>#include <string>int main(){    std::pair<std::string, int> p(Weraphael, 18);    std::cout << 姓名: << p.first << std::endl;    std::cout << 年龄: << p.second << std::endl;    return 0;}

【程序结果】

三、pair的大小比较

它们的比较顺序是这样的首先先比较first成员变量如果相等就会比较second

注意pair内部成员的类型不一样的两个对象不能比较大小

【代码验证】

pair内部已经实现过比较大小运算符重载了

#include <iostream>#include <utility>#include <string>int main(){    std::pair<int, std::string> p1(18, Weraphael);    std::pair<int, std::string> p2(19, Weraphael);    std::cout << p1是否小于p2 << (p1 < p2) << std::endl;    std::pair<int, std::string> p3(18, zhangsan);    std::cout << p1是否小于p3 << (p1 < p3) << std::endl;    std::pair<int, std::string> p4(18, Weraphael);    std::cout << p1是否等于p4 << (p1  p4) << std::endl;    return 0;}

【运行结果】

四、make_pair函数

功能make_pair函数接收两个参数然后它会将这两个参数来创建pair对象

【代码样例】

#include <iostream>#include <utility>#include <string>int main(){    std::pair<int, int> p  std::make_pair(1, 2);    std::cout << first: << p.first << std::endl;    std::cout << second: << p.second << std::endl;    return 0;}

【程序结果】

以上我们发现用了make_pair函数后代码变长了。但是实际上make_pair函数是用来简化代码的

从C到C17结构体创建对象的代码一直都在简化。我们可以看C98是如何简化pair创建对象的代码的

有两个long long类型的变量现需要通过一个打印函数将这两个变量打包成pair后再打印

如果不使用make_pair函数就会写出以下代码

#include <iostream>#include <utility>void Print(std::pair<long long, long long> p){    std::cout << first: << p.first << std::endl;    std::cout << second: << p.second << std::endl;}int main(){    long long a  1;    long long b  2;    Print(std::pair<long long, long long>(a, b));    return 0;}

【运行结果】

但是用了make_pair函数后以上代码就会简化很多

#include <iostream>#include <utility>void Print(std::pair<long long, long long> p){    std::cout << first: << p.first << std::endl;    std::cout << second: << p.second << std::endl;}int main(){    long long a  1;    long long b  2;    Print(std::make_pair(a, b));    return 0;}

【运行结果】

注以上知识是为了为map容器打基础

标签:
声明:无特别说明,转载请标明本文来源!