【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车载系统+…

在PostgreSQL中,EXCLUSIVE MODE和SHARE MODE两种不同的表锁模式的区别

特性&#xff1a; 表锁模式描述适用场景示例EXCLUSIVE MODE 锁定表&#xff0c;阻止其他事务对该表的任何写操作&#xff08;插入、更新、删除&#xff09;。允许其他事务读取&#xff08;SELECT&#xff09;表数据。其他事务不能对该表施加更高层次的锁&#xff08;如 EXCLUS…

输出时间序列中的时区是什么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…

【经验】无线鼠标、键盘的usb接收器配对

1、鼠标 以B.O.W航世无线鼠标&#xff08;型号MW157&#xff09;为例&#xff0c;配对USB接收器的步骤如下&#xff1a; 1&#xff09;鼠标关机后&#xff0c;USB接收器 取下来 &#xff0c;重新插上去&#xff1b; 2&#xff09;先按住“鼠标右键”&#xff0c;再按住“鼠标滚…

论文解读《Order-Agnostic Data Augmentation for Few-Shot Named Entity Recognition》

论文解读系列文章目录 文章目录 论文解读系列文章目录一、现有的NER DA技术要么对单词进行基于规则的操作&#xff0c;从而破坏句子的语义连贯性&#xff0c;要么利用生成模型进行实体或上下文的替换&#xff0c;这需要大量的标注数据&#xff0c;且与在低资源环境中操作的目标…

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

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

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

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

Eclipse Java 构建路径

Eclipse Java 构建路径 Eclipse 是一款广受欢迎的集成开发环境(IDE),特别适用于 Java 开发。在 Eclipse 中,构建路径(Build Path)是指编译器在编译项目时搜索类(.class)文件和源代码(.java)文件的路径。正确设置构建路径对于确保项目能够顺利编译和运行至关重要。 …

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

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

在 Windows 环境下,Git 默认会自动处理 CRLF 和 LF 之间的转换。

在 Windows 环境下&#xff0c;Git 默认会自动处理 CRLF 和 LF 之间的转换。 要确保这一点并自动处理换行符差异&#xff0c;你可以按照以下步骤配置 1. 配置 Git 自动转换 CRLF 使用 Git Bash 或命令行执行以下命令&#xff0c;设置 Git 自动处理换行符&#xff1a; git con…

Linux系统硬件性能监控常用命令

ECS系统指南之Linux系统诊断免费在线阅读_藏经阁-阿里云开发者社区 排查Linux系统中的硬件故障是一个系统化的过程&#xff0c;涉及到对不同硬件组件的检查和分析。以下是排查硬件故障的详细步骤&#xff1a; 1. 使用系统日志和诊断工具 dmesg: 运行 dmesg 命令查看内核消息缓…

【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/…