先做个在线电影网站该怎么做,省工程建设信息网,成都网站建设网站制作,关于做网站的总结#x1f466;个人主页#xff1a;Weraphael ✍#x1f3fb;作者简介#xff1a;目前学习C和算法 ✈️专栏#xff1a;C航路 #x1f40b; 希望大家多多支持#xff0c;咱一起进步#xff01;#x1f601; 如果文章对你有帮助的话 欢迎 评论#x1f4ac; 点赞#x1… 个人主页Weraphael ✍作者简介目前学习C和算法 ✈️专栏C航路 希望大家多多支持咱一起进步 如果文章对你有帮助的话 欢迎 评论 点赞 收藏 加关注✨ 目录 一、什么是pair二、pair的初始化三、pair的大小比较四、make_pair函数 一、什么是pair
假设我想打包两种数据第一个是学生的姓名第二个是学生的学号我们就可以写出如下结构体
#include stringstruct Student
{std::string _name; // 名字int _id; // 学号
};像这样只打包两种数据我们就可以使用std::pair。pair的中文意思一对也就是说它只能保存一对数据 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有两个公有成员变量分别是first和second。并且它们可以直接在类外被使用。
【声明方式】
类模板实例化对象需要加上
std::pair第一个数据类型,第二个数据类型 变量名接下来我用代码演示 一下刚才的学生结构体
#include iostream
#include utility
#include stringint main()
{// 第一个数据类型为string表示学生的姓名// 第二个数据类型为int,表示学生的学号std::pairstd::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常见的初始化是以上第一种和第二种分别是默认构造和拷贝构造
注意如果使用默认构造函数初始化其成员变量first和second的值是0如果是string就是空字符串 除此之外还有第三种初始化方式
std::pair类型1, 类型2 变量名(第一个数据的初始值, 第二个数据的初始值);
// 对应的类型一定要匹配【代码演示】
#include iostream
#include utility
#include stringint main()
{std::pairstd::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 stringint main()
{std::pairint, std::string p1(18, Weraphael);std::pairint, std::string p2(19, Weraphael);std::cout p1是否小于p2 (p1 p2) std::endl;std::pairint, std::string p3(18, zhangsan);std::cout p1是否小于p3 (p1 p3) std::endl;std::pairint, 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 stringint main()
{std::pairint, 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 utilityvoid Print(std::pairlong 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::pairlong long, long long(a, b));return 0;
}【运行结果】 但是用了make_pair函数后以上代码就会简化很多
#include iostream
#include utilityvoid Print(std::pairlong 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容器打基础