蓝桥杯省赛无忧 STL 课件11 pair

在这里插入图片描述

01 pair的定义和结构

在C++中,pair是一个模板类,用于表示一对值的组合,它位于头文件中。
pair类的定义如下:

template<class T1,class T2>struct pair{T1 first;//第一个值T2 second;//第二个值// 构造函数pair();pair(const T1& X, const T2& y);//比较运算符重载bool operator==(const pair& rhs) const;bool operator!=(const pair& rhs) const;//其他成员函数和特性// ... };

pair类模板有两个模板参数,T1和T2,分别表示第一个值和第二个值的类型。
pair类有两个成员变量,first和second,分别表示第一个值和第二个值。
pair类还有一些成员函数和特性,例如默认构造函数、带参数的构造函数、比较运算符重载等。
使用pair类,你可以方便地将两个值组合在一起,并进行传递、存储和操作。
例如,可以将两个整数组合在一起作为函数的返回值,或者将一对值存储在容器中。
下面是一些使用pair的示例

#include<bits/stdc++.h>
using namespace std;
int main(){pair<int,double> p1(1,3.14);pair<char,string> p2('a',"hello");cout<<p1.first<<","<<p1.second<<endl;cout<<p2.first<<","<<p2.second<<endl;return 0;
}

在这里插入图片描述

02 pair的嵌套

pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员。
通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示,第2、3个维度由一个pair表示。
下面是一个示例代码,演示了如何嵌套使用pair:

#include<bits/stdc++.h>
using namespace std;
int main(){pair<int,int> p1(1,2);pair<int,pair<int,int>> p2(3,make_pair(4,5));pair<pair<int,int>,pair<int,int>> p3(make_pair(6,7),make_pair(3,4));cout<<p1.first<<","<<p1.second<<endl;cout<<p2.first<<","<<p2.second.first<<","<<p2.second.second<<endl;cout<<p3.first.first<<","<<p3.first.second<<","<<p3.second.first<<","<<endl;return 0;
}

在这里插入图片描述
在这个示例中,我们创建了三个pair对象:p1、p2和p3.
·p1是一个简单的pair,包含两个整数值。
·p2是一个嵌套的pair,其中第一个值是一个整数,第二个值是一个pair,其中包含两个整数值。
·p3是一个嵌套的pair,其中每个值都是一个pair,每个pair包含两个整数值。
通过访问嵌套的pair对象的成员变量,我们可以获取到相应的值。

03 pair自带排序规则

pair自带的排序规则是按照first成员进行升序排序。
如果first成员相等,则按照second成员进行升序排序。
这意味着当你使用标准库中的排序算法(如sort)对包含pair对象的容器进行排序时,会根据pair对象的first成员进行排序。
下面是一个示例代码,演示了如何使用par进行排序:

#include<bits/stdc++.h>
using namespace std;
int main(){vector<pair<int,int>> vec;vec.push_back(make_pair(3,2));vec.push_back(make_pair(1,4));vec.push_back(make_pair(2,1));sort(vec.begin(),vec.end());for(const auto& p : vec){cout<<p.first<<","<<p.second<<endl;} return 0;
}

在这个示例中,我们创建了一个存储pair对象的向量vec,其中包含三个pair对象,
然后,我们使用sort函数对vec进行排序。由于pair对象的排序规则是按照first成员进行升序排序,所以排序后的结果是
在这里插入图片描述
最后,我们通过遍历vec并输出每个pair对象的成员,验证了排序结果。
需要注意的是,如果你想按照其他排序规则对pair进行排序,可以自定义比较函数或使用lambda表达式来传递给排序算法。这样,你可以根据自己的需求定义排序规则.

04 代码示例

#include<bits/stdc++.h>
using namespace std;
//定义一个结构体,表示一个人的信息
struct Person{string name;int age;
}; 
int main(){
//创建一个存储Person对象的向量vector<Person> people;
//添加一些Person对象到向量中people.push_back({"Alice",25});people.push_back({"Bob",30});people.push_back({"Charlie",20});
//创建一个存储pair的向量,每个pair包含一个Person对象和一个评分vector<pair<Person,int>> scores;
//添加一些pair到向量中scores.push_back({people[0],90});scores.push_back({people[1],85});scores.push_back({people[2],95});
//遍历pair向量,并输出每个人的姓名、年龄和评分
for(const auto& pair:scores){cout<<"Name: "<<pair.first.name<<endl;cout<<"Age: "<<pair.first.age<<endl;cout<<"Score: "<<pair.second<<endl;cout<<endl;
} return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/339771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟超市商品结算系统

要求:全程一个角色(管理员即用户) (1)需要管理员注册与登录 (2)管理员登录之后&#xff0c;可以进行上架新的商品(商品名称和单价) (3)管理员登录之后&#xff0c;也可以下架商品 (4)在节假日有优惠活动,可以对其中的一些商品修改相应的单价(价格提高和价格降低都可以) (5)用户…

如何充分发挥HubSpot CRM优势,优化销售流程?

在竞争激烈的商业环境中&#xff0c;销售流程的优化对企业至关重要。HubSpot CRM作为一款全面而强大的工具&#xff0c;为企业提供了实现销售优化的完美平台。让我们深入了解如何最大程度地利用HubSpot CRM&#xff0c;提高销售效率。 1.建立清晰的销售流程 HubSpot CRM的第一…

MySQL的三种存储引擎 InnoDB、MyISAM、Memory

InnoDB 1). 介绍 InnoDB是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在 MySQL 5.5 之后&#xff0c;InnoDB是默认的MySQL 存储引擎。 2). 特点 DML操作遵循ACID模型&#xff0c;支持事务&#xff1b; 行级锁&#xff0c;提高并发访问性能&#xff1b; 支持外键F…

爱情视频相册怎么做?2.14情人节表白/活动视频模板PR剪辑素材

美好爱情故事&#xff0c;情人节表白视频相册怎么做&#xff1f;粉色浪漫的PR情人节表白/活动视频模板剪辑素材mogrt下载。 特征&#xff1a;可编辑文字和调整颜色&#xff0c;通过智能对象替换图像&#xff0c;RGB颜色模式&#xff0c;易于自定义&#xff0c;无需插件&#xf…

【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你认识和了解Java虚拟机的特性和本质

全方位带你认识和了解Java虚拟机的特性和本质 专栏介绍前提准备面向人群知识脉络背景介绍Java虚拟机定义抽象规范多种平台实现 JVM和JRE、JDK的关系JVM实例和JVM执行引擎实例JVM的基本结构类加载子系统Bootstrap ClassLoaderExtension ClassLoaderApp ClassLoaderCustom ClassL…

Linux第24步_安装windows下的VisualStudioCode软件

Windows下的VSCode安装后&#xff0c;还需要安装gcc编译器和g编译器。 gcc&#xff1a;编译C语言程序的编译器&#xff1b; g&#xff1a;编译C代码的编译器&#xff1b; 1、在Windows下安装VSCode&#xff1b; 双击“VSCodeUserSetup-x64-1.50.1.exe”,直到安装完成。 2、…

如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问

文章目录 1. 拉取容器魔方镜像2. 运行容器魔方3. 本地访问容器魔方4. 群辉安装Cpolar5. 配置容器魔方远程地址6. 远程访问测试7. 固定公网地址 本文主要介绍如何在群辉7.2版本中使用Docker安装容器魔方&#xff0c;并结合Cpolar内网穿透工具实现远程访问本地网心云容器魔方界面…

用可视化案例讲Rust编程2. 编码的核心组成:函数

从第一天学习编程&#xff0c;可能大家就听说这样的组成公式&#xff1a; 程序算法数据结构 ——该公式出自著名计算机科学家沃思(Nikiklaus Wirth) 实际上&#xff0c;程序除了以上两个主要要素之外&#xff0c;还应当采用结构化程序设计方法进行程序设计&#xff0c;并且用…

Salesforce生态系统2024年就业趋势

对于Salesforce专业人士来说&#xff0c;新一年的开始都是激动人心的。但2023年仍存在显著挑战&#xff0c;经济技术低迷导致裁员&#xff0c;以及Salesforce生态系统增长放缓等等&#xff0c;这些挑战将延续到2024年。 回顾2023年 2023年&#xff0c;Salesforce生态系统以及…

回顾2023,立2024flag

文章目录 回顾2023与CSDN相识专栏整理数据回顾 立2024flag 回顾2023 在过去的一年里&#xff0c;前端技术不断演进和创新。新技术、新框架层出不穷&#xff0c;给前端工程师提供了更多选择和挑战。2023年已经成为过去&#xff0c;回首这一年&#xff0c;我们也经历了许多挑战和…

1.11寒假集训

A: 解题思路&#xff1a; 这题看示例不难发现&#xff0c;答案就是a * b的每一项的和&#xff0c;例如111 111就是111*&#xff08;1 1 1&#xff09; 333,知道后此题就迎刃而解了 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {in…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…