蓝桥杯省赛无忧 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;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度解析Cron表达式:精确控制任务调度的艺术

深度解析Cron表达式&#xff1a;精确控制任务调度的艺术 希望我们都可以满怀期待的路过每一个转角 去遇见 那个属于自己故事的开始 去追寻那个最真实的自己 去放下 去拿起 安然&#xff0c;自得&#xff0c;不受世俗牵绊… 导言 在计算机科学领域&#xff0c;任务调度是一项关…

MySQL安装部署-单机版

MySQL是关系型数据库&#xff0c;本文主要描述在操作系统Linux CentOS 7下安装MySQL Server 8.035单机版本。 https://dev.mysql.com/downloads/mysql/ 如上所示&#xff0c;从MySQL官方网站下载开源社区版本MySQL Server 8.035的最新稳定版本&#xff0c;该版本是对应Linux …

【排序算法】四、堆排序(C/C++)

「前言」文章内容是排序算法之堆排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 堆排序1.1 原理1.2 堆的向下调整1.3 堆排序代码实现1.3 性质总结 堆排序 1.1 原理 概念介…

Mondo备份linux操作系统为iso镜像 —— 筑梦之路

简介 Mondo Rescue&#xff08;以下简称Mondo&#xff09;可以说是Linux 下的Ghost&#xff0c;它可以将你的系统像照相一样备份至磁带&#xff0c;CD-R&#xff0c;CD-RW&#xff0c;NFS或硬盘分区。Mondo广泛支援LVM&#xff0c;RAID&#xff0c;ext2, ext3, JFS, XFS,Reise…

平时执行很快的SQL语句,为什么会突然卡一下?

InnoDB在处理更新语句的时候&#xff0c;只做了写日志这一个磁盘操作&#xff0c;这个日志叫作redo log&#xff08;重做日志&#xff09;&#xff0c;在更新内存写完redo log后&#xff0c;就返回给客户端&#xff0c;本次更新成功。 把内存里的数据写入磁盘的过程&#xff0…

烟火检测AI边缘计算智能分析网关V4在安防项目中的应用及特点

一、行业背景 随着社会和经济的发展&#xff0c;公共安全和私人安全的需求都在不断增长。人们需要更高效、更准确的安防手段来保障生命财产安全&#xff0c;而人工智能技术正好可以提供这种可能性&#xff0c;通过智能监控、人脸识别、行为分析等手段&#xff0c;大大提高了安防…

JVM初识

什么是JVM&#xff1f; JVM全称是Java Virtual Machine&#xff0c;中文译名Java虚拟机。 JVM本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 JVM的功能 jvm的功能主要分为三部分&#xff1a; 解释和运行 对字节码文件中的指令&#xff0c;实…

【机器学习】模型调参工具:Hyperopt 使用指南

机器学习| 模型调参工具&#xff1a;Hyperopt 使用指南 前言1. Hyperopt是什么&#xff1f;2. Hyperopt的优缺点3. 如何使用 Hyperopt 进行调参3.1 安装 Hyperopt3.2 构建超参数空间3.3 定义目标函数3.4 运行 Hyperopt 优化3.5 获取最优超参数 4. XGB调参代码示例参考资料 前言…

idea编译报错(Maven项目)

idea编译报错 找不到符号 第一步&#xff1a;开启注解处理器 第二步&#xff1a;清理MVN&#xff0c;package并重新编译 第三步&#xff1a;重新导入项目&#xff1a;

SAP PP配置学习(五)

查找 四、 其它 设置 MM 过帐号码范围 定义凭证号码范围 OB52 打开期间 MMPV 开帐 &#xff08;下篇见&#xff09;

GC2003七通道NPN 达林顿管,专为符合标准 TTL 而制造

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

深入探讨:开发连锁餐饮APP的关键技术要点

时下&#xff0c;开发一款功能强大、用户友好的连锁餐饮APP成为许多餐饮企业的当务之急。在本文中&#xff0c;我们将深入探讨开发连锁餐饮APP的关键技术要点&#xff0c;涵盖了前端、后端以及数据库等方面。 一、前端开发 前端是用户与APP交互的入口&#xff0c;因此设计良好…

.NET开源、强大的Web报表统计系统

前言 今天分享一个.NET开源、强大的Web报表统计系统&#xff1a;CellReport。 项目官方介绍 CellReport 诞生的初衷是为了解决日常快速制作统计报表的需要。 CellReport 是一个为复杂统计报表为核心目标的制作、运行工具。你可以使用数据库、excel文件、api服务、已有报表等为…

【开源】基于JAVA语言的康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

华为“纯血”鸿蒙加速进场 高校、企业瞄准生态开发新风口

近日&#xff0c;华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出&#xff0c;开启华为终端未来大发展的新十年。 他特别提到&#xff0c;未来要构建强大的鸿蒙生态&#xff0c;2024年是原生鸿蒙的关键一年&#xff0c;将加快推进各类鸿蒙原生应用的开发…

【Node.js学习 day3——http模块】

创建HTTP服务端 //1.导入http模块 const http require(http);//2.创建服务对象 const server http.createServer((request, response) > {response.end(Hello HTTP Server);//设置响应体 });//3.监听端口&#xff0c;启动服务 server.listen(9000,()>{console.log(服务…

【PaperReading】5. Open-Vocabulary SAM

Category Content 论文题目 Open-Vocabulary SAM: Segment and Recognize Twenty-thousand Classes Interactively 作者 Haobo Yuan1 Xiangtai Li1 Chong Zhou1 Yining Li2 Kai Chen2 Chen Change Loy1 1S-Lab, Nanyang Technological University 2Shanghai Artificial In…

力扣日记1.11-【二叉树篇】450. 删除二叉搜索树中的节点

力扣日记&#xff1a;【二叉树篇】450. 删除二叉搜索树中的节点 日期&#xff1a;2024.1.11 参考&#xff1a;代码随想录、力扣 450. 删除二叉搜索树中的节点 题目描述 难度&#xff1a;中等 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key…

燃情瞬间,智能酒精壁炉点亮户外聚会新潮流

在户外聚会中&#xff0c;一种备受瞩目的装饰品和功能性家居设备正逐渐崭露头角&#xff0c;那就是智能酒精壁炉。这种独特的户外装置不仅为聚会场合带来独特的氛围&#xff0c;还具有许多引人注目的优势。 其明亮的火焰不仅照亮整个场所&#xff0c;还散发出温暖迷人的光芒&am…

创建型模式 | 工厂模式

文章目录 一、简单工厂1.1、原理1.2、核心角色1.3、UML类图1.4、代码实现1.5、总结 二、工厂模式2.1、原理2.2、关键角色2.3、代码实现2.4、总结 三、抽象工厂模式3.1、原理3.2、关键角色3.3、UML类图3.4、工厂模式与抽象工厂模式的区别 前言 工厂模式是最常用的设计模式之一&a…