⭐pair的简介pair是CSTL标准模板库中的一个现有容器它将2个数据整合成一组数据当我们类似需求的时候就可以使用到pair啦pair其实有点像Python中字典中的键值对Key-Value一个Key对应着一个Value。pair的本质其实就是个结构体它含有两个成员变量first和second。因为使用的是struct不是class所以在定义后是可以直接使用pair中的成员变量的。其标准库类型–pair类型定义在#include utility 头文件中1#includeutility类模板1templateclassT1,classT2structpair参数T1为第一个元素的数据类型T2为第二个元素的数据类型。功能pair将一对值T1和T2整合为一组数据这一对值的数据类型可以相同也可以不相同由我们自己指定访问pair中的两个数据的值可以通过变量名.first和变量名.second来实现。例123456789101112#includeutility#includeiostreamusingnamespacestd;intmain(){pairstring,strings1;s1.firstctx;s1.second666;couts1.firstendl;couts1.secondendl;couts1.firsts1.secondendl;}⭐pair的定义及初始化在定义一个类型为pair的对象时最主要的点就是在定义时需要提供两个数据类型且两个数据类型不必相同。值得一提的是pair中的数据类型也可以是CSTL中的自带的容器。12345//定义pairint,intp1;//定义一个pair类型的空对象p1两个元素的数据类型都是intpairint,doublep2;//定义一个pair类型的空对象p2一个元素的数据类型都是int,另一个是doublepairdouble,stringp3;//定义一个pair类型的空对象p3一个元素的数据类型都是double另一个是stringpairstring,vectorint p4;//定义一个pair类型的空对象p4一个个元素的数据类型都是string另一个是vector容器当然of course我们也可以在定义一个pair类型的对象时对它进行初始化赋值。12345//初始化pairstring,string p1(ctx,666);//定义一个pair类型的对象p1并初始化两个元素的类型都是string初识默认值为ctx和666pairstring,int p2(ctx,18);//定义一个pair类型的对象p3并初始化两个元素的类型分别是string和int初识默认值为ctx和18pairstring,int p3(p2);//拷贝p2的值来初始化p3pairstring,int p3p2;//将p2的值赋值给p3⭐typedef简化pairpair容器的存在在一定程度上方便了我们但是如果我们需要同时定义多个相同pair类型的对象的时候正常定义的话是不是就显得有些繁琐了呢所以我们可以使用到typedef关键字来简化定义。123456//typedef简化pair的定义typedefpairstring,string replace;replace c1(ctx,666);replace c2(hhxx,ttxs);coutc1.firstc1.secondendl;coutc2.firstc2.secondendl;⭐pair中的make_pair一般make_pair都使用在需要pair做参数的位置可以直接调用make_pair生成pair对象。 另一个使用的方面就是pair可以接受隐式的类型转换这样可以获得更高的灵活度。1234567891011121314pairint,double p1;p1 make_pair(18,1.78);coutp1.first p1.secondendl;//输出为18 1.78pairint,double p2;intm 18;doublen 1.78;p2 make_pair(m,n);coutp2.first p2.secondendl;//输出为18 1.78std::pairint,float(18, 1.78);std::make_pair(18, 1.78);第一个的second变量是float类型而make_pair函数会将second变量都转换成double类型。⭐pair的真题巩固下面是PTA中团体程序设计天梯赛-练习集的一道L2二阶题目难度不大在学完本文后正好合适拿来给大家练练手下方为题目链接--------------------L2-042 老板的作息表--------------------新浪微博上有人发了某老板的作息时间表表示其每天 4:30 就起床了。但立刻有眼尖的网友问这时间表不完整啊早上九点到下午一点干啥了本题就请你编写程序检查任意一张时间表找出其中没写出来的时间段。输入格式输入第一行给出一个正整数 N为作息表上列出的时间段的个数。随后 N 行每行给出一个时间段格式为hh:mm:ss - hh:mm:ss其中 hh、mm、ss 分别是两位数表示的小时、分钟、秒。第一个时间是开始时间第二个是结束时间。题目保证所有时间都在一天之内即从 00:00:00 到 23:59:59每个区间间隔至少 1 秒并且任意两个给出的时间区间最多只在一个端点有重合没有区间重叠的情况。输出格式按照时间顺序列出时间表中没有出现的区间每个区间占一行格式与输入相同。题目保证至少存在一个区间需要输出。输入样例813:00:00 - 18:00:0000:00:00 - 01:00:0508:00:00 - 09:00:0007:10:59 - 08:00:0001:00:05 - 04:30:0006:30:00 - 07:10:5805:30:00 - 06:30:0018:00:00 - 19:00:00输出样例04:30:00 - 05:30:0007:10:58 - 07:10:5909:00:00 - 13:00:0019:00:00 - 23:59:59AC代码1234567891011121314151617181920212223#includebits/stdc.husingnamespacestd;intmain(){intn;cinn;vectorpairstring,stringpr;string s1,s2;charc;for(inti0;in;i){cins1cs2;pr.push_back({s1,s2});}pr.push_back({23:59:59,});pr.push_back({,00:00:00});sort(pr.begin(),pr.end());for(inti0;ipr.size()-1;i){if(pr[i].second!pr[i1].first)coutpr[i].second - pr[i1].firstendl;}}复制讲解⭐写在最后OK本文的学习就到此结束啦希望本文可以帮助到各位有需要的小伙伴们喔也希望各位小伙伴们不要吝惜手里的三连哦❤️❤️❤️