STL(一)(pair篇)

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.hqwc.cn/news/256683.html

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

相关文章

[足式机器人]Part4 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch02 Rigid Body Configuration and Velocity 1. Rigid Body Configuration1.1 Special Orthogonal Group1.2 Use of Ro…

LiDAR 城市模型的 3D Python 工作流

1.引言 LiDAR&#xff08;Light Detection and Ranging&#xff09;是一种通过测量激光束从发射到返回的时间来测量距离&#xff0c;从而生成物体的三维表面模型的技术。这种技术在城市建模中具有广泛的应用&#xff0c;可以用于城市规划、环境监测、交通仿真等领域。而使用Pyt…

【分布式微服务专题】从单体到分布式(二、SpringCloud整合Nacos)

目录 前言阅读对象阅读导航前置知识笔记正文一、下载安装二、项目整合2.1 服务注册与发现2.2 动态配置管理 三、其他实验四、服务之间的调用 学习总结感谢 前言 本篇笔记主要是记录我整合Nacos项目进来的过程。以实现服务注册发现&#xff0c;以及分布式配置管理。关于Nacos&a…

【AIGC】prompt工程从入门到精通--图片生成专题

本文为系列教程【AIGC】prompt工程从入门到精通的子教程。 一、介绍 与文本提示相比&#xff0c;找到最佳的提示词来生成完美的图片并没有那么成熟。这可能是因为创建对象自身的挑战&#xff0c;这些对象基本上是主观的并且往往缺乏良好的准确性度量方法。 本指南涵盖了基本…

科普小知识-3D 打印是什么?

3D 打印是什么&#xff1f;作为近年来备受关注的前沿科技&#xff0c;3D 打印技术正在不断改变着制造业、医疗领域、艺术设计等多个领域的面貌。其又被称为增材制造&#xff0c;是一种通过电脑设计&#xff0c;逐层堆叠材料来创建三维物体的技术。 3D 打印的基本原理 3D 打印…

NLP自然语言处理学习笔记

参考&#xff1a;NLP&#xff08;自然语言处理&#xff09;介绍 - 知乎 (zhihu.com) 一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自…

DOS 批处理 (二)

DOS 批处理 1. 基础 DOS 命令1.1 基础命令1.2 文件系统操作1.3 文件夹管理1.4 文件管理1.5 网络相关1.6 系统管理1.7 IF、FOR和NETIFFORNET 1. 基础 DOS 命令 command /? 查找帮助DOS命令不区分命令字母的大小写 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

Mac电脑统计分析绘图 GraphPad Prism 10 最新 for Mac

GraphPad Prism 10是一款强大的科学数据分析和可视化软件&#xff0c;提供了丰富的统计工具、数据可视化选项和报告生成功能。它使用户能够更轻松地分析和解释实验数据&#xff0c;以支持科学研究和决策。 数据导入和整理&#xff1a;GraphPad Prism 10支持从多种数据源导入数据…

【开源】基于JAVA语言的农家乐订餐系统

项目编号&#xff1a; S 043 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S043&#xff0c;文末获取源码。} 项目编号&#xff1a;S043&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核…

Apache+mod_jk模块代理Tomcat容器

一、背景介绍 最近在看Tomcat运行架构原理, 正好遇到了AJP协议(Apache JServ Protocol). 顺道来研究下这个AJP协议和具体使用方法. 百度百科是这么描述AJP协议的: AJP&#xff08;Apache JServ Protocol&#xff09;是定向包协议。因为性能原因&#xff0c;使用二进制格式来传输…

Java的三种代理模式实现

代理模式的定义&#xff1a; Provide a surrogate or placeholder for another object to control access to it.&#xff08;为其他对象提供一种代理以控制对这个对象的访问。&#xff09; 简单说&#xff0c;就是设置一个中间代理来控制访问原目标对象&#xff0c;达到增强原…

JAVA导出PDF(一)

思路一&#xff1a;直接导出pdf 使用freemarker和itext把html转pdf&#xff0c;存在中文乱码&#xff0c;宋体不识别&#xff0c;需下载simsun.ttc字体&#xff0c;空白占位符不识别等等问题&#xff0c;对前端依赖性较大&#xff0c;不推荐&#xff1b; 适用范围&#xff1a;…