当前位置: 首页 > news >正文

【C++进阶】pair容器

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、什么是pair
  • 二、pair的初始化
  • 三、pair的大小比较
  • 四、make_pair函数

一、什么是pair

假设我想打包两种数据,第一个是学生的姓名,第二个是学生的学号,我们就可以写出如下结构体:

#include <string>struct Student
{std::string _name; // 名字int _id; // 学号
};

像这样只打包两种数据,我们就可以使用std::pairpair的中文意思一对,也就是说它只能保存一对数据

在这里插入图片描述

pair是C++已经定义好的结构体,同时也是一个类模板,并且使用前需要加上头文件<utility>

【pair部分源码】

template <class T1, class T2>
struct pair
{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair(): first(T1()), second(T2()){}pair(const T1& a, const T2& b): first(a), second(b){}
}

通过以上源码我们发现:pair有两个公有成员变量,分别是:firstsecond。并且它们可以直接在类外被使用。

【声明方式】

类模板实例化对象需要加上<>

std::pair<第一个数据类型,第二个数据类型> 变量名

接下来我用代码演示 一下刚才的学生结构体

#include <iostream>
#include <utility>
#include <string>int main()
{// 第一个数据类型为string,表示学生的姓名// 第二个数据类型为int,表示学生的学号std::pair<std::string, int> stu;stu.first = "Weraphael";stu.second = 2022;std::cout << "姓名:" << stu.first << std::endl;std::cout << "学号:" << stu.second << std::endl;return 0;
}

【运行结果】

在这里插入图片描述

二、pair的初始化

在这里插入图片描述

pair常见的初始化是以上第一种和第二种,分别是默认构造和拷贝构造

  • 注意:如果使用默认构造函数初始化,其成员变量firstsecond的值是0(如果是string就是空字符串)

在这里插入图片描述

  • 除此之外,还有第三种初始化方式
std::pair<类型1, 类型2> 变量名(第一个数据的初始值, 第二个数据的初始值);
// 对应的类型一定要匹配!!!

【代码演示】

#include <iostream>
#include <utility>
#include <string>int main()
{std::pair<std::string, int> p("Weraphael", 18);std::cout << "姓名:" << p.first << std::endl;std::cout << "年龄:" << p.second << std::endl;return 0;
}

【程序结果】

在这里插入图片描述

三、pair的大小比较

它们的比较顺序是这样的:首先先比较first成员变量,如果相等就会比较second

在这里插入图片描述

注意:pair内部成员的类型不一样的两个对象不能比较大小!!!

在这里插入图片描述

【代码验证】

pair内部已经实现过比较大小运算符重载了

在这里插入图片描述

#include <iostream>
#include <utility>
#include <string>int main()
{std::pair<int, std::string> p1(18, "Weraphael");std::pair<int, std::string> p2(19, "Weraphael");std::cout << "p1是否小于p2:" << (p1 < p2) << std::endl;std::pair<int, std::string> p3(18, "zhangsan");std::cout << "p1是否小于p3:" << (p1 < p3) << std::endl;std::pair<int, std::string> p4(18, "Weraphael");std::cout << "p1是否等于p4:" << (p1 == p4) << std::endl;return 0;
}

【运行结果】

在这里插入图片描述

四、make_pair函数

在这里插入图片描述

功能:make_pair函数接收两个参数,然后它会将这两个参数来创建pair对象

【代码样例】

#include <iostream>
#include <utility>
#include <string>int main()
{std::pair<int, int> p = std::make_pair(1, 2);std::cout << "first:" << p.first << std::endl;std::cout << "second:" << p.second << std::endl;return 0;
}

【程序结果】

在这里插入图片描述

以上我们发现:用了make_pair函数后,代码变长了。但是实际上,make_pair函数是用来简化代码的

从C++到C++17,结构体创建对象的代码一直都在简化。我们可以看C++98是如何简化pair创建对象的代码的:

  • 有两个long long类型的变量,现需要通过一个打印函数,将这两个变量打包成pair后再打印

如果不使用make_pair函数,就会写出以下代码

#include <iostream>
#include <utility>void Print(std::pair<long long, long long> p)
{std::cout << "first:" << p.first << std::endl;std::cout << "second:" << p.second << std::endl;
}int main()
{long long a = 1;long long b = 2;Print(std::pair<long long, long long>(a, b));return 0;
}

【运行结果】

在这里插入图片描述

但是用了make_pair函数后,以上代码就会简化很多

#include <iostream>
#include <utility>void Print(std::pair<long long, long long> p)
{std::cout << "first:" << p.first << std::endl;std::cout << "second:" << p.second << std::endl;
}int main()
{long long a = 1;long long b = 2;Print(std::make_pair(a, b));return 0;
}

【运行结果】

在这里插入图片描述


注:以上知识是为了为map容器打基础!!!

相关文章:

【C++进阶】pair容器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

Linux--进程等待

1.什么是进程等待 1.通过系统调用wait/waitid,来对子进程进行进行检测和回收的功能。 2.为什么有进程等待 1.对于每个进程来说&#xff0c;如果子进程终止&#xff0c;父进程没有停止&#xff0c;就会形成僵尸进程&#xff0c;导致内存泄露&#xff0c;为了防止僵尸进程的形成…...

VMware CentOS 虚拟机扩容

参考文章&#xff1a; VMware中centos磁盘扩容 - 简书 看这篇文章进行操作&#xff01;扩展根分区报错&#xff0c;xfs_growfs 提示 / is not a mounted XFS filesystem-CSDN博客 [rootnode001 ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/…...

CentOS 编译安装 nginx

CentOS 编译安装 nginx 修改 yum 源地址为 阿里云 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum makecache升级内核和软件 yum -y update安装常用软件和依赖 yum -y install gcc gcc-c make cmake zlib zlib-devel openss…...

学习笔记-MongoDB(命令增删改查,聚合,权限管理,索引,java使用)

基础概念 1 什么是mogodb&#xff1f; MongoDB 是一个基于分布式文件/文档存储的数据库&#xff0c;由 C 编写&#xff0c;可以为 Web 应用提供可扩展、高性能、易部署的数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库中功…...

第13期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…...

OpenCV学习(一)——图像读取

1. 图像入门 读取图像显示图像写入图像 import cv2# 读取图像 img cv2.imread(lena.jpg) print(img.shape)# 显示图像 cv2.imshow(image, img) cv2.waitKey(0) cv2.destroyAllWindows()# 写入图像 cv2.imwrite(image.jpg, img)1.1 读取图像 读取图像cv.imread(filename, fl…...

并发编程- 线程池ForkJoinPool工作原理分析(实践)

数据结构加油站&#xff1a; Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值&#xff0c;低于此阈值就不再进行拆分public MergeSort…...

小程序原生开发中的onLoad和onShow

在小程序的原生开发中&#xff0c;onLoad和onShow是两个常用的生命周期函数&#xff0c;用于管理页面的加载和显示。 onLoad&#xff1a;该函数会在页面加载时触发。当页面第一次加载时&#xff0c;它会被调用一次&#xff0c;之后切换到其他页面再返回时不会再触发。可以在on…...

springcloud技术栈以及相关组件

常用中间件 注册中心—nacos分布式服务之间的交互工具—Feign服务安全入口中间件—Gateway各个服务的异步通信组件—rabbitmqRabbitMq分布式场景的应用配置微服务的容器部署–docker分布式检索引擎—elasticSearches在分布式场景的应用分布式事务协调中间间— seata分布式服务…...

An Early Evaluation of GPT-4V(ision)

本文是LLM系列文章&#xff0c;针对《An Early Evaluation of GPT-4V(ision)》的翻译。 GPT-4V的早期评估 摘要1 引言2 视觉理解3 语言理解4 视觉谜题解决5 对其他模态的理解6 结论 摘要 在本文中&#xff0c;我们评估了GPT-4V的不同能力&#xff0c;包括视觉理解、语言理解、…...

Vue在移动端实现图片的手指缩放

使用V-View点击图片进行预览&#xff1a; npm install v-viewer --save 在main.js进行引入 在图片下方会有 轮播箭头下一张上一张等&#xff0c;因此要用配置来关闭。 import Viewer from v-viewer // viewer.js一种图片预览处理工具 import viewerjs/dist/viewer.css …...

Failed to prepare the device for development

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…...

PPT文档图片设计素材资源下载站模板源码/织梦内核(带用户中心+VIP充值系统+安装教程)

源码简介&#xff1a; PPT文档图片设计素材资源下载站模板源码&#xff0c;作为织梦内核素材资源下载站源码&#xff0c;它自带了用户中心和VIP充值系统&#xff0c;也有安装教程。 织梦最新内核开发的模板&#xff0c;该模板属于素材下载、文档下载、图库下载、PPT下载、办公…...

万能鼠标设置 SteerMouse v5.6.8

鼠标可谓是用户们在使用电脑时候的必备外接设备呢&#xff01;适合你自己的鼠标设置也绝对能够优化你的Mac使用体验&#xff01;想要更好的Mac体验就试试用Steermouse Mac版吧。它通过软件来自由设置你的鼠标操作&#xff01;在这款万能鼠标设置工具中&#xff0c;用户可以在偏…...

16 用于NOMA IoT网络上行链路安全速率最大化的HAP和UAV协作框架

文章目录 摘要相关模型仿真实验仿真结果 摘要 优化无人机到HAP的信道分配、用户功率和无人机三维位置来研究上行安全传输解决非凸问题&#xff0c;采用K-means聚类算法&#xff0c;将成对的用户划分成不同的组&#xff0c;每个簇可以有相应的无人机服务&#xff0c;然后将构造…...

【C++】STL容器——vector类的使用指南(含代码演示)(11)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一、vector类——基本介绍二、vector类…...

elementui 修改 el_table 表格颜色,表格下方多了一条线问题

解决&#xff1a; 加入以下代码 .el-table::before { z-index: inherit; } 如果使用了scoped&#xff0c;需要加上stylus /deep/ (其他的css语言有不一样的写法) 或是全局加入 body .el-table::before { z-index: inherit; } 其他背景色&#xff0c;表格边框颜色修改 //表头/de…...

阿里云/腾讯云国际站代理:阿里云服务器介绍

阿里云是由阿里巴巴集团旗下的云计算服务提供商。阿里云提供的服务包括云服务器、数据库服务、数据分析、人工智能、大数据、物联网等多种云计算产品和解决方案。阿里云的数据中心遍布全球多个地区&#xff0c;提供可靠且安全的云计算基础设施和服务。阿里云在中国以及全球范围…...

Go学习第十章——文件操作,Json和测试

Go文件操作&#xff0c;Json和测试 1 文件1.1 基本介绍1.2 读取的基本操作1.3 写入的基本操作1.4 使用案例(三个) 2 Go语言的Json使用2.1 序列化案例2.2 反序列化案例 3 单元测试3.1 先看个需求3.2 快速入门3.3 入门总结 1 文件 1.1 基本介绍 文件在程序中是以流的形式来操作…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...