【C++ STL 模板类】pair 键值对

文章目录

  • 【 1. pair 对象的创建 】
  • 【 2. pair 对象的赋值 】
  • 【 3. pair 对象的比较 】
  • 【 4. pair对象成员的互换】

  • C++ STL 标准库提供了 pair 类模板,专门用来将 2 个普通元素 first 和 second(可以是 C++ 基本数据类型、结构体、类自定的类型)创建成一个新元素<first, second>。
  • 头文件 <utility>

【 1. pair 对象的创建 】

  • 默认构造函数:空的 pair对象。
// 1. 默认构造函数,即创建空的 pair 对象
pair <DataType1, DataType2> pair1;
  • 赋值构造函数:传入参数赋值。
// 2. 直接使用 2 个元素初始化成 pair 对象
pair <DataType1, DataType2> pair2(DataType1_Value, DataType2_Value);
  • 拷贝构造函数:利用已有对象赋值。
// 3. 拷贝构造函数:即借助另一个 pair 对象,创建新的 pair 对象
pair <DataType1, DataType2> pair3(pair2);
  • 移动构造函数(C++ 11 标准新增)
    在创建 pair4 对象时,调用了 make_pair() 函数 ,它也是 <utility> 头文件提供的,其功能是 生成一个 pair 对象。因此,当我们将 make_pair() 函数的返回值(是一个临时对象,这个临时对象是右值,意味着它是一个临时存在的、不可修改的对象)作为参数传递给 pair() 构造函数时,其调用的是移动构造函数,而不是拷贝构造函数。
// 4. 移动构造函数
pair <DataType1, DataType2> pair4 (make_pair(DataType1_Value, DataType2_Value));
//或:
pair <DataType1, DataType2> pair4 = make_pair(DataType1_Value, DataType2_Value);
  • 右值引用构造函数(C++11 标准新增)
// 5. 使用右值引用参数,创建 pair 对象
pair <DataType1, DataType2> pair5(DataType1(DataType1_Value), DataType2(DataType2_Value));
  • 不常用的构造函数(C++11 标准新增)
// 6. (不常用)
pair (piecewise_construct_t pwc, tuple<Args1...> first_args, tuple<Args2...> second_args);
  • 实例
#include <iostream>
//#include <utility>
#include <string>
using namespace std;
int main() {// 调用构造函数 1,也就是默认构造函数pair <string, int> pair1;// 调用第 2 种构造函数pair <string, string> pair2("baidu", "http://www.baidu.com");// 调用拷贝构造函数pair <string, string> pair3(pair2);//调用移动构造函数pair <string, string> pair4(make_pair("baidu", "http://www.baidu.com"));
//或:
// pair <string, string> pair4 = make_pair("baidu", "http://www.baidu.com");// 调用第 5 种构造函数pair <string, string> pair5(string("baidu"), string("http://www.baidu.com"));cout << "pair1: " << pair1.first << " " << pair1.second << endl;cout << "pair2: " << pair2.first << " " << pair2.second << endl;cout << "pair3: " << pair3.first << " " << pair3.second << endl;cout << "pair4: " << pair4.first << " " << pair4.second << endl;cout << "pair5: " << pair5.first << " " << pair5.second << endl;return 0;
}

在这里插入图片描述

【 2. pair 对象的赋值 】

  • 手动为 pair 对象赋值
pair1.first = "baidu";
pair1.second = 34;

【 3. pair 对象的比较 】

  • 注意:对于 进行比较的 2 个 pair 对象,其对应的键和值的类型必须相同,否则将没有可比性 同时 编译器提示没有相匹配的运算符,即找不到合适的重载运算符。
  • <utility> 头文件中除了提供创建 pair 对象的方法之外,还为 pair 对象重载了 <、<=、>、>=、==、!= 这 6 种运算符 ,其运算规则是:对于进行比较的 2 个 pair 对象,先比较 pair.first 元素的大小,如果相等则继续比较 pair.second 元素的大小
  • 实例
#include <iostream>
#include <utility>      // pair
#include <string>       // string
using namespace std;
int main() {pair <string, int> pair1("STL教程", 20);pair <string, int> pair2("C++教程", 20);pair <string, int> pair3("C++教程", 30);//pair1和pair2的key不同,value相同if (pair1 != pair2) {cout << "pair != pair2" << endl;}//pair2和pair3的key相同,value不同if (pair2 != pair3) {cout << "pair2 != pair3" << endl;}return 0;
}

在这里插入图片描述

【 4. pair对象成员的互换】

  • pair类模板还提供有一个 swap() 成员函数 ,能够 互换 2 个 pair 对象的键值对,其操作成功的 前提是这 2 个 pair 对象的键和值的类型要相同
  • 实例
#include <iostream>
#include <utility>
#include <string>
using namespace std;
int main() {pair <string, int> pair1("pair", 10);                   pair <string, int> pair2("pair2", 20);//交换 pair1 和 pair2 的键值对pair1.swap(pair2);cout << "pair1: " << pair1.first << " " << pair1.second << endl;cout << "pair2: " << pair2.first << " " << pair2.second << endl;return 0;
}

在这里插入图片描述

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

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

相关文章

中安未来 OCR:开启高效身份证件识别新时代

在数字化快速发展的今天&#xff0c;高效准确地处理各类信息变得至关重要。中安未来 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术以其卓越的性能和广泛的应用场景&#xff0c;成为了众多企业和机构的得力助手。其中&#xff0c;身份…

480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?

技术背景 好多开发者&#xff0c;在设置视频编码参数的时候&#xff0c;对不同分辨率的带宽设置&#xff0c;缺乏相关的经验&#xff0c;实际上&#xff0c;视频分辨率与所需带宽之间的关系受到多个因素的影响&#xff0c;包括视频编码方式、帧率、视频内容的动态程度等。下面…

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)

TOC 问题背景 从零开始学springcloud微服务项目 注意事项&#xff1a; 约定 > 配置 > 编码IDEA版本2021.1这个项目&#xff0c;我分了很多篇章&#xff0c;每篇文章一个操作步骤&#xff0c;目的是显得更简单明了controller调service&#xff0c;service调dao默认安装ngi…

5G工业路由器智能电网部署实录:一天内解决供电、网络

凌晨4:13,我被手机震动惊醒。变电站值班人员发来紧急消息:昨晚部署的SR800突然离线。我立即查看了STAR Device Manager平台,确认是设备A37号在3:47分失去连接。(key-iot.com/iotlist/sr800-3.html) 6:30到达变电站。检查SR800状态,发现是供电问题导致设备重启。这个老旧变电站…

Docker 安装使用

1. 下载 下载地址&#xff1a;Index of linux/static/stable/x86_64/ 下载好后&#xff0c;将文件docker-18.06.3-ce.tgz用WinSCP等工具&#xff0c;上传到不能外网的linux系统服务器 2. 安装 解压后的文件夹docker中文件如下所示&#xff1a; 将docker中的全部文件&#xff…

Gstreamer的webrtcbin插件

1、输入参数 static GOptionEntry entries[] {{"peer-id", 0, 0, G_OPTION_ARG_STRING, &peer_id, "String ID of the peer to connect to", "ID"},{"server", 0, 0, G_OPTION_ARG_STRING, &server_url, "Signalling se…

Android15音频进阶之组音量调试(九十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

输出时间序列中的时区是什么Series.dt.tz_convert(tz)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 输出时间序列中的时区是什么 Series.dt.tz_convert(tz) [太阳]选择题 关于以下代码的输出结果的说法中正确的是? import pandas as pd t pd.date_range(start2014-08-01 09:00, freq…

【Java】常用方法合集

以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…

学习莫烦python---神经网络

一、卷积神经网络区别 1、“卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解 –翻译…

项目结构(后端+前端)(若依)

项目结构&#xff08;后端前端&#xff09; 文章目录 项目结构&#xff08;后端前端&#xff09;前言一、后端结构1.若依 二、前端结构1. 总结 前言 方便了解项目结构 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一、后端结构 1.若依 com.ruoyi ├── ruoyi-adm…

SQL语句高级查询(适用于新手)

SQL查询语句的下载脚本链接&#xff01;&#xff01;&#xff01; 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 本文旨在为那些编程基础相对薄弱的朋友们提供一份详尽的指南&#xff0c;特别聚…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

Java项目-基于spingboot框架的篮球论坛系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【计算机网络 - 基础问题】每日 3 题(四十九)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

从Excel文件中提取HTTP链接并在浏览器中打开

本文介绍了一段Python代码&#xff0c;使用openpyxl库从Excel文件中提取包含HTTP或HTTPS链接的单元格&#xff0c;并在默认浏览器中打开这些链接。 使用说明 确保安装openpyxl库&#xff0c;可以使用以下命令安装&#xff1a; pip install openpyxl选择包含链接的Excel文件&…

帝国CMS7.0 7.2 7.5微信登录插件

这款帝国cms微信登录插件&#xff0c;非常方便&#xff0c;新手式设置。 使用方法&#xff1a; 1、将文件夹拷贝到 /e/memberconnect 2、访问 /e/memberconnect/weixin/install/ 进行安装 3、登陆后台 用户–>外部接口–>管理外部登陆接口 输入 appid、appkey 4、前台链…

MATLAB人脸考勤系统

MATLAB人脸考勤系统课题介绍 该课题为基于MATLAB平台的人脸识别系统。传统的人脸识别都是直接人头的比对&#xff0c;现实意义不大&#xff0c;没有一定的新意。该课题识别原理为&#xff1a;先采集待识别人员的人脸&#xff0c;进行训练&#xff0c;得到人脸特征值。测试的时…

【计网笔记】应用层

应用层服务传输层协议端口号DNSTCP或UDP53FTPTCP20或21TELNETTCP23HTTPTCP80HTTPSTCP443SMTPTCP25POP3TCP110IMAPTCP143MIME//DHCPUDP67SNMPUDP161 域名系统DNS 使用具有一定语义的域名来助记IP地址 一个域名可能有多个IP地址 服务器农场 前端调配请求去不同的服务器不同服务…

机器学习面试笔试知识点之K近邻算法(KNN)、最大期望算法(EM)

机器学习面试笔试知识点之K近邻算法KNN、最大期望算法EM 一、K近邻算法(KNN)&#xff08;监督学习算法&#xff09;1. 什么是KNN1.1 KNN的通俗解释1.2 近邻的距离度量1.3 K值选择1.4 KNN最近邻分类算法的过程 2.KDD的实现&#xff1a;KD树2.1 构建KD树2.2 KD树的插入2.3 KD树的…