STL之pair

目录

pair的定义和结构

示例

pair的嵌套

示例

pair自带排序规则

示例

代码示例


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类,可以方便的将两个值组合在一起,并进行传递、存储和操作。

例如,可以将两个整数组合在一起作为函数的返回值,或者将一对值存储在容器中。

示例

#include<iostream>
#include<utility>
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;
}

输出结果:

1,3.14

a,hello

pair的嵌套

pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员。通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。

例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示,第2、3个维度由一个pair表示。

示例

#include<iostream>
#include<utility>
using namespace std;
int main()
{pair<int, double>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(8, 9));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 << ',' << p3.second.second << endl;return 0;
}

运行结果:

1,2
3,4,5
6,7,8,9

pair自带排序规则

pair自带的排序规则是按照first成员进行升序排序。

如果first成员相等,则按照second成员进行升序排序。

这意味着如果当你使用标准库中的排序算法(如std::sort)对包含pair对象的容器进行排序时,会根据pair对象的first成员进行排序。

示例

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
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& i : vec){cout << i.first << ',' << i.second << endl;}return 0;

运行结果:

1,4
2,1
3,2

代码示例

#include<iostream>
#include<vector>
#include<utility>
using namespace std;
//定义一个结构体,表示一个人的信息
struct Person
{string name;int age;
};int main()
{//创建一个存储Person对象的向量vector<Person>people;//添加一些Person对象到向量中people.push_back({"张三",25});people.push_back({"李四",30});people.push_back({"王五",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 << ", Age:" << pair.first.age << ",Score:" << pair.second << endl;}return 0;
}

结果:

Name:张三, Age:25,Score:90
Name:李四, Age:30,Score:85
Name:王五, Age:20,Score:95

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

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

相关文章

IntelliJ IDEA Java 连接 mysql 配置(附完整 demo)

下载 MySQL 驱动 从MySQL官网下载JDBC驱动的步骤如下&#xff1a; 1&#xff09;访问MySQL的官方网站&#xff1a;MySQL 2&#xff09;点击页面上方的"DOWNLOADS"菜单&#xff1b; 3&#xff09;在下载页面&#xff0c;找到"MySQL Community (GPL) Downloads…

QObject_thread

QObject::thread QThread *QObject::thread() 返回对象所在的线程。 QThread *QObject::thread() const {return d_func()->threadData.loadRelaxed()->thread.loadAcquire(); }void QObject::moveToThread(QThread *targetThread) 将此对象及其孩子关联到targetThre…

C++内存管理机制(侯捷)笔记2

C内存管理机制&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 下面是第二讲allocator具体实…

11 双向链表

单链表的局限&#xff1a; 单链表的缺点&#xff1a;逆序访问单链表中的元素耗时大。&#xff08;时间复杂度&#xff1a;O&#xff09; 双向链表的定义 第0个节点【a1】的pre指针为NULL&#xff0c;要注意 插入操作&#xff1a; 删除操作&#xff1a; 初步实现双链表 代码&…

【Vue系列】Vue3快速构建项目,以及在已有代码情况首次打开如何初始化依赖项

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是是《前端》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌…

一天一个设计模式---适配器模式

概念 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口之间进行协同工作&#xff0c;使得原本由于接口不匹配而无法合作的类能够一起工作。 具体内容 适配器模式主要包括以下几个要素&#xff1a; 目标接…

C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

访问结构体成员 要访问结构体的成员&#xff0c;请使用点语法 (.): // 创建名为 myStructure 的结构体 struct MyStructure {int myNum;char myLetter; };int main() {// 创建名为 s1 的 myStructure 的结构体变量struct MyStructure s1;// 为 s1 的成员分配值s1.myNum 13;s…

Miniconda Python解释器 Conda 包管理器 Pytorch

Miniconda Miniconda 是一个轻量级的 Anaconda 版本&#xff0c;它是一个用于管理 Python 环境和包的开源工具。Anaconda 是一个数据科学和机器学习的开发环境&#xff0c;它包含了许多常用的 Python 包和工具。 与 Anaconda 相比&#xff0c;Miniconda 的安装包更小&#xf…

VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

Java中输入和输出处理(三)二进制篇

叮咚&#xff01;加油&#xff01;马上学完 读写二进制文件Data DataInputStream类 FilFeInputStream的子类 与FileInputStream类结合使用读取二进制文件 DataOutputStream类 FileOutputStream的子类 与FileOutputStream类结合使用写二进制文件 读写二进制代码 package 面…

vue实现-年、月、日、时、分、秒、星期?

一、文章引导 #mermaid-svg-nP4oT3Y4d6oaxUsg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-icon{fill:#552222;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-text{fill:#552222;stroke:#55222…

Pangolin编译

文章目录 版本编译错误 版本 ubuntu 22 编译 # 复制选择版本&#xff08;ORB SLAM 需要的版本为0.6&#xff09; git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin/ git checkout v0.6# 编译 mkdir build && cd build cmake .. -DCMAKE_INS…

倍福(Bechhoff) CX8090嵌入式PC控制器开发没有想像中的那么难

笔者曾2023年初曾为云南阜外医院新风系统开发自动控制系统。医院所有新风设备和公区照明全部采用倍福嵌入式PC控制器实现智能控制。其中新风和供水计量通过CX8090实现控制&#xff1b;公区照明通过BC9050实现控制&#xff1b;并采用美国邦纳人机界面(THM035B&#xff09;实现远…

树形结构的窗口小部件

这段代码是一个使用Qt框架的C程序&#xff0c;实现了一个树形结构的窗口小部件&#xff08;TreeWidget&#xff09;。以下是主要的解释&#xff1a; #include "treewidget.h" #include "ui_treewidget.h"TreeWidget::TreeWidget(QWidget *parent) : QWidg…

DB2除法的小数位问题(四舍五入问题)以及其他常用的函数

DB2除法的小数位问题&#xff08;四舍五入问题&#xff09;以及其他常用的函数 1. DB2取第一条数据2. DB2 中指定值排序2.1 使用case when2.2 使用decode函数 3. 拼接函数4. 强制转换类型——cast函数5. DB2除法的小数位问题&#xff08;四舍五入问题&#xff09;5.1 关于round…

栈和排序.

给你一个1->n的排列和一个栈&#xff0c;入栈顺序给定 你要在不打乱入栈顺序的情况下&#xff0c;对数组进行从大到小排序 当无法完全排序时&#xff0c;请输出字典序最大的出栈序列 输入 第一行一个数n 第二行n个数&#xff0c;表示入栈的顺序&#xff0c;用空格隔开&…

three.js 关键帧动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

用汇编编写加解密函数

1.data段 data db "hello,sam" key db "key" dataLen dword ? endata byte 10 dup(0) dedata byte 10 dup(0) 2.Encryption&#xff08;加密&#xff09; Encryption procpush ebpmov ebp,esp;加密数据长度,循环次数mov ecx,sizeof data;寄存器不够用…

金和OA jc6 GetAttOut SQL注入漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

方法 ‘NetWork.call()‘ 的签名与类 ‘Model‘ 中基方法的签名不匹配

方法 ‘NetWork.call()’ 的签名与类 ‘Model’ 中基方法的签名不匹配 这个错误通常出现在 TensorFlow 的 Keras 模型中&#xff0c;表示子类化的模型&#xff08;比如你的 NetWork 类&#xff09;在实现 call 方法时与基类 Model 中定义的 call 方法的签名不匹配。 在这里&am…