STL(一)(pair篇)

news2024/11/20 14:29:41

1.pair的定义和结构

  • 在c++中,pair是一个模板类,用于表示一对值的组合
  • 它位于<utility>头文件中

 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<iostream>
#include<utility>
int main(){
	std::pair<int,double>p1(1,3.14);
	std::pair<char,std::string>p2('a',"hello");
	
	std::cout<<p1.first<<","<<p1.second<<"\n";
	std::cout<<p2.first<<","<<p2.second<<"\n"; 
}

 输出 1,3.14

         a,hello

### 以上代码创建了两个pair对象,分别包含不同类型的值,然后,通过访问first和second成员变量,输出了这些值


2.pair的嵌套

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

pair的嵌套示例:

#include<iostream>
#include<utility>
int main(){
	std::pair<int,int>p1(1,2);
	std::pair<int,std::pair<int,int>>p2(3,std::make_pair(4,5));
	std::pair<std::pair<int,int>,std::pair<int,int>>p3(std::make_pair(6,7),std::make_pair(8,9));
	
	std::cout<<p1.first<<","<<p1.second<<"\n";
	std::cout<<p2.first<<","<<p2.second.first<<","<<p2.second.second<<"\n"; 
	std::cout<<p3.first.first<<","<<p3.first.second<<","<<p3.second.first<<","<<p3.second.second<<"\n"; 
}

输出: 


 3.pair自带排序规则

  • pair自带的排序规则是按照first成员进行升序排序
  • 如果first成员相等,则按照second成员进行升序排序
  • 这意味着当使用标准库中的排序算法(如std::sort)对包含pair对象的容器进行排序时,会根据pair对象的first成员进行排序

pair进行排序的示例:

#include<iostream> 
#include<utility> 
#include<vector> 
#include<algorithm>
int main(){
	std::vector<std::pair<int,int>>vec;
	vec.push_back(std::make_pair(3,2));
	vec.push_back(std::make_pair(1,4));
	vec.push_back(std::make_pair(2,1));
	
	std::sort(vec.begin(),vec.end());
	
	for(const auto& p:vec){
		std::cout<<p.first<<","<<p.second<<"\n";
	}
	return 0;
} 

输出:


4.代码示例:

#include<iostream> 
#include<utility> 
#include<vector> 
//定义一个结构体,表示一个人的信息 
struct Person{
	std::string name;
	int age;
};

int main(){
	//创建一个储存Person对象的向量
	std::vector<Person>people;
	//添加一些Person对象到向量中
	people.push_back({"Alice",25}); 
	people.push_back({"Bob",30}); 
	people.push_back({"Charlie",20});
	
	//创建一个储存pair动的向量,每一个pair包含一个Person对象和有一个评分
	std::vector<std::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){
		std::cout<<"Name:"<<pair.first.name<<"\n";
		std::cout<<"Age:"<<pair.first.name<<"\n";
		std::cout<<"Score:"<<pair.second<<"\n";
		std::cout<<"\n";
	} 
	return 0;
}

 输出:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

域名与SSL证书

域名是互联网上的地址标识符&#xff0c;它通过DNS&#xff08;Domain Name System&#xff09;将易于记忆的人类可读的网址转换为计算机可以理解的IP地址。当用户在浏览器中输入一个网址时&#xff0c;实际上是通过DNS解析到对应的服务器IP地址&#xff0c;从而访问到相应的网…

诚邀莅临,共商发展丨“交汇未来”行业大模型高峰论坛

大会简介 今年以来&#xff0c;以ChatGPT为典型代表的大模型在全球数字科技界引起极大关注&#xff0c;其强大的数据处理能力和泛化性能使得其在各个领域都有广泛的应用前景&#xff0c;驱动千行百业的数字化转型升级&#xff0c;成为新型工业化和实体经济的重要推动力&#x…

【C语言】vfprintf函数

vfprintf 是 C 语言中的一个函数&#xff0c;它是 fprintf 函数的变体&#xff0c;用于格式化输出到文件中。vfprintf 函数接受一个格式化字符串和一个指向可变参数列表的指针&#xff0c;这个列表通常是通过 va_list 类型来传递的。vfprintf 函数的主要用途是在需要处理不定数…

数据分析基础之《matplotlib(5)—直方图》

一、直方图介绍 1、什么是直方图 直方图&#xff0c;形状类似柱状图却有着与柱状图完全不同的含义。直方图牵涉统计学的概念&#xff0c;首先要对数据进行分组&#xff0c;然后统计每个分组内数据元的数量。在坐标系中&#xff0c;横轴标出每个组的端点&#xff0c;纵轴表示频…

PyQt5 - 鼠标连点器

文章目录 ⭐️前言⭐️鼠标连点器 ⭐️前言 本次设计的鼠标连点器主要是对QVBoxLayout、QHBoxLayout和QStackedWidget进行一个回顾复习&#xff0c;加深对它们的理解&#xff0c;提高运用的熟练度。 ⭐️鼠标连点器 如以下代码所示&#xff0c;设计两个QWidget控件&#xff…

【学习笔记】python仅拷贝list的值,引出浅拷贝与深拷贝

一、python 仅拷贝list的值&#xff08;来源于gpt&#xff09; 在 Python 中&#xff0c;可以使用切片或 copy() 方法来仅拷贝列表的值。 1、使用切片 a [1, 2, 3, 4, 5] b a[:] # 通过切片来拷贝 a 的值 在上面的代码中&#xff0c;我们使用切片来拷贝列表 a 的值&#xff…

Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

目录 前言 Vuex是什么 Vuex的配置 安装vuex 配置vuex文件 Vuex核心对象 actions mutations getters state Vuex在vue中的使用 辅助函数 Vuex模块化开发 前言 本文介绍一种新的用于组件传值的插件 —— vuex Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态…

MDIO读写控制实验

简介&#xff1a; 以太网&#xff1a; 以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准&#xff0c; 该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网的分类有标准以太网&#xff08;10Mbit/s&#xff09;、 快速以太网(100Mbit/s)和千兆以太网&am…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复

网络技术的不断发展&#xff0c;也为网络安全带来了威胁&#xff0c;近期云天数据恢复中心的工程师陆续接到很多企业的求助&#xff0c;在本月&#xff0c;很多企业的计算机服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业计算机系统瘫痪&#xff0c;无法正常工作&#xff0c…

苹果 macOS 14.1.2 正式发布 更新了哪些内容?

苹果今日向 Mac 电脑用户推送了 macOS 14.1.2 更新&#xff08;内部版本号&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距离上次发布隔了 28 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到升级更新的时间略…

配置Smart Link主备备份示例

1、Smart Link和Monitor Link简介。 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#xff…

Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

104.进程创建

目录 进程创建相关的函数 获取当前进程的进程ID&#xff08;PID&#xff09; 获取当前进程的父进程ID&#xff08;PPID&#xff09; 创建一个新的进程 fork()剖析 调用格式 创建子进程 子进程与父进程 父子进程执行流 代码演示 进程创建相关的函数 Linux中进程ID为pi…

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇4(附项目源码,完结)

免责声明:因为文章附带源码,所以我上锁了,整理不易,但是推荐大家自己手动跟敲代码理解更加深入 本节最终效果 文章目录 本节最终效果前言动画拿出枪 静止 检视枪动画切换行走奔跑动画换子弹动画和音效限制跑步和换弹期间不可以射击,换弹期间也不可以检视枪开火动画瞄准动画…

linux文件查找_which_find_locate

7.1 文件查找 7.1.1 简介 which&#xff1a;命令查找 ​ find&#xff1a;文件查找&#xff0c;针对文件名 ​ locate&#xff1a;文件查找&#xff0c;依赖数据库7.1.2 which which命令用于查找文件。 ​ which指令会在环境变量$PATH设置的目录里查找符合条件的文件。 whi…

Appium获取toast方法封装

一、前置说明 toast消失的很快&#xff0c;并且通过uiautomatorviewer也不能获取到它的定位信息&#xff0c;如下图&#xff1a; 二、操作步骤 toast的class name值为android.widget.Toast&#xff0c;虽然toast消失的很快&#xff0c;但是它终究是在Dom结构中出现过&…

在工作中灵活运用CHATGPT

问CHAT&#xff1a;基于微课技术的小学创新课堂教学模式开题&#xff0c;重要变更&#xff0c;侧重说明对照课题申请书、根据评议专家意见所作的研究计划调整 CHAT回复&#xff1a;在本研究项目的开题阶段&#xff0c;我们设想通过利用微课技术来提高小学创新课堂的教学质量。 …

2021年第十届数学建模国际赛小美赛C题读这篇文章有多难解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 C题 读这篇文章有多难 原题再现&#xff1a; 有些英语文本更容易阅读&#xff0c;比如低年级英语考试中出现的阅读材料。然而&#xff0c;有些文本很难阅读&#xff0c;需要读者接受一定程度的教育才能理解。让我们研究一下如何衡量英语文本…

香港高防服务器的选择及几个常见疑问解答

​  互联网的迅猛发展&#xff0c;不仅带来的是机遇&#xff0c;同样也有挑战&#xff0c;比如恶意攻击的频发泛滥&#xff0c;让一些正规企业网站、游戏网站、购物网站等成为了 DDoS 攻击的目标点&#xff0c;所以我们在使用香港服务器时&#xff0c;也不得不为它加一层“护…

【keil备忘录】2. stm32 keil仿真时的时间测量功能

配置仿真器Trace内核时钟为单片机实际的内核时钟&#xff0c;需要勾选Enable设置&#xff0c;设置完成后Enable取消勾选也可以&#xff0c;经测试时钟频率配置仍然生效&#xff0c;此处设置为48MHZ: 时间测量时必须打开register窗口&#xff0c;否则可能不会计数 右下角有计…