C++中pair使用详细说明

2023-10-27

一、pair 的介绍

pair 是一个很实用的 "小玩意",当想要将两个元素绑在一起作为一个合成元素、又不想要因此定义结构体时,使用 pair 可以很方便地作为一个代替品。

也就是说,pair 实际上可以看作一个内部有两个元素的结构体,且这两个元素的类型是可以指定的,如下:

struct pair
{
	typeName1 first;
	typeName2 second;
};

 

二、pair 的定义

要使用 pair,应先添加头文件 #include <utility>,并在头文件下面加上 " using namespace std; " ,然后就可以使用了。

注意:由于 map 的内部实现中涉及 pair,因此添加 map 头文件时会自动添加 utility 头文件,此时如果需要使用 pair ,就不需要额外再去添加 utility 头文件了。

// pair 有两个参数,分别对应 first 和 second 的数据类型,它们可以是任意基本数据类型或容器。
pair<typeName1, typeName2> name;

// 想要定义参数为 string 和 int 类型的 pair,如下:
pair<string, int> p;

//如果想在定义 pair 时进行初始化,只需要跟上一个小括号,里面填写两个想要初始化的元素即可;
pair<string, int> p("haha",5);
//如果想要在代码中临时构建一个 pair,有如下两种方法:

// (1) 将类型定义写在前面,后面用小括号内两个元素的方式。
pair<string, int>("haha", 5);

// (2) 使用自带的 make_pair 函数。
make_pair("haha", 5)

 

三、pair 中元素的访问

pair 中只有两个元素,分别是 first 和 second ,只需要按正常结构体的方式去访问即可。

#include <iostream>
#include <utility>
#include <string>
using namespace std;

int  main()
{
	pair<string, int> p;
	p.first = "haha";
	p.second = 5;
	cout << p.first << " " << p.second << endl;
	p = make_pair("xixi", 55);
	cout << p.first << " " << p.second << endl;
	p = pair<string, int>("heihei", 555);
	cout << p.first << " " << p.second << endl;
	return 0;
}

 

四、pair 常用函数实例解析

(1)比较操作数

两个 pair 类型数据可以直接使用 ==,!=,<,<=,>,>= 比较大小,比较规则是先以 first 的大小作为标准,只有当 first 相等时才去判别 second 的大小。

#include <cstdio>
#include <utility>
using namespace std;

int  main()
{
	pair<int, int> p1(5,10);
	pair<int, int> p2(5, 15);
	pair<int, int> p3(10, 5);
	if (p1<p3)
	{
		printf("p1 < p3\n");
	}
	if (p1 <= p3)
	{
		printf("p1 <= p3\n");
	}
	if (p1 < p2)
	{
		printf("p1 < p2\n");
	}
	return 0;
}

 

五、pair 的常见用途

关于 pair 有两个比较常见的例子:
(1)用来代替二元结构体及其构造函数,可以节省编码时间。

(2) 作为 map 的键值对来进行插入,如下。

#include <iostream>
#include <string>
#include <map>
using namespace std;

int  main()
{
	map<string, int> mp;
	mp.insert(make_pair("hah",5));
	mp.insert(pair<string,int>("heihei", 10));
	for (map<string, int>::iterator it = mp.begin(); it != mp.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中pair使用详细说明 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • SlideLive:提供小清新风格PPT模板下载

    简介 在学习和工作中 有时需要制作PPT 本文主要介绍如何从SlideLive平台下载小清新风格PPT模板 其中 SlideLive是一款PPT在线播放和分享的网站 该网站已收录大量的PPT模板 包括各种风格PPT模板和PPT图表 下载地址
  • 4款不错的UI设计软件推荐

    俗话说 如果工人想做好工作 他们必须首先磨利他们的工具 高质量的UI设计软件将使设计事半功倍 近年来 UI设计软件的逐渐多样化 让一些需要使用UI设计软件的小伙伴不知道如何选择 我整理了四款优秀的免费UI设计软件 别错过了 1 即时设计 即
  • 在子组件中使用Echarts图表无法刷新显示的问题(解决:子组件刷新)

    场景问题 在项目中 子组件中使用了Echarts的图表 图表的数据需要从父组件传入Id来进行查询 墒情仪与气象站相同的结构 当切换设备时 图表无法回显 父子组件传值正常 解决心路历程 1 我将两种设备传值的Id分开传递 处理无果 2 给子组
  • Linux下操作Docker(四):导入导出

    docker镜像的导出和导入 显示当前docker中的镜像 docker images 镜像列表如下 REPOSITORY TAG IMAGE ID CREATED SIZE pointsift latest 90b2ef439b40 2
  • java循环判断的使用

    程序的结构 一般来说程序的结构包含有下面三种 1 顺序结构 2 选择结构 3 循环结构 顺序结构 程序至上而下逐行执行 一条语句执行完之后继续执行下一条语句一直到程序的末尾 选择结构 是根据条件的成立与否 再决定要执行哪些语句的一种结构 循
  • 原生js实现简单智能关键词搜索功能

    现在很多网站都有智能搜索功能 它能根据用户的输入自动提示出需要补全的数据 方便用户的查询 下面我们用JavaScript来简单实现它 html部分 div div
  • STM32学习笔记3:KEIL5中使用ST-Link烧录调试STM32芯片的步骤

    一 开发板连接ST LINK ST LINK连接电脑 操作细节点击这里 二 配置debug选项 点击魔术棒 debug use 项选择 ST Link Debugger 再点击 Setting 这边会显示设备信息 如果显示没有设备 需要检查
  • 数字电路设计之OpenRISC(一)

    ARM PowerPC等商用IP核授权费价格较高 所以开源处理器越来越受到大家的关注 开源处理器比如OpenRISC NIOS II LEON2等 这里我会介绍OpenRISC的优点 一 指令集可扩展 二 添加专用的硬件协处理单元 一般来说
  • Kettle(一) 下载及环境部署

    1 kettle下载地址 kettle资源 https download csdn net download kingo0 87360222 JDK资源 LinuxJDK1 8安装包 jdk1 8安装包 Java文档类资源 CSDN下载 2
  • oracle 触发器 for each row 理解

    看到了触发器 中有个 for each row 不是很明白就查了查资料 因为只是简单研究 就先写总结一下 触发器的一般语法 CREATE OR REPLACE TIGGER 触发器名 触发时间 触发事件 ON 表名 FOR EACH ROW
  • AndroidStudio中Module创建及项目变Module导入其它项目步骤

    AndroidStudio中Module创建及项目变Module导入其它项目步骤记录 1 创建module 2 添加依赖 3 将已有项目变为module导入到其他项目中 将已有项目更改 将旧项目作为module导入 4 遇到的一些问题 总结
  • Ceres Solver安装及bug解决

    Ceres Solver安装与入门使用 安装教程 http www ceres solver org installation html 点击下载最新的稳定版 解压 编译 测试 安装 1 Linux系统下安装步骤 安装依赖 CMake su
  • 拯救pandas计划(19)——使用自定义方法计算两列的相似度

    拯救pandas计划 19 使用自定义方法计算两列的相似度 最近发现周围的很多小伙伴们都不太乐意使用pandas 转而投向其他的数据操作库 身为一个数据工作者 基本上是张口pandas 闭口pandas了 故而写下此系列以让更多的小伙伴们爱
  • GLES3.0中文API-glBeginQuery

    名称 glBeginQuery 划定查询对象的边界 C规格 void glBeginQuery GLenum target GLuint id void glEndQuery GLenum target 参数 glBeginQuery ta
  • react中“create-react-app”不是内部或者外部命令也不是可运行程序的解决办法

    换个命令创建项目 npm init react app my app 可创建 npm run start 启动
  • antd-design/pro-table组件说明(官方readme)

    ant design pro table Antd官网没找到Pro Table的相关说明文档 下面是从依赖包里捞出来的readme Demo codesandbox API pro table 在 antd 的 table 上进行了一层封装
  • 洛谷 贪心 部分背包 线段覆盖 排队接水 python

    P2240 深基12 例1 部分背包问题 数据结构选择 python没有结构体 选用二维数组 物品价值 重量 存储单个物品方便排序 根据贪心策略 首先计算性价比 然后按性价比由大到小排序 只要没有达到背包承载的重量 就装入 python n
  • 第八章 综合案例——构建DVD租赁商店数据仓库①

    8 3 2 加载日期数据至日期维度表 1 打开Kettle工具 创建转换 使用Kettle工具 创建一个转换load dim date 并添加生成记录控件 增加序列控件 JavaScript代码控件 表输出控件以及Hop跳连接线 2 配置
  • 用作者提供的net1->net2生成MTCNN的训练样本(positive,negative,part,landmark)

    本代码基于作者提供的python版本代码修改 参考 https github com DuinoDu mtcnn blob master demo py 作者提供 https github com dlunion mtcnn blob ma
  • C++中pair使用详细说明

    一 pair 的介绍 pair 是一个很实用的 小玩意 当想要将两个元素绑在一起作为一个合成元素 又不想要因此定义结构体时 使用 pair 可以很方便地作为一个代替品 也就是说 pair 实际上可以看作一个内部有两个元素的结构体 且这两个元