C++ pair的用法案例详解
作者:物随心转 发布时间:2021-09-21 01:40:20
标签:C++,pair
一、介绍
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair。当然你也可以自定义一个结构体struct。不过大家都是为了方便,所以就直接用pair了。
pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
其标准库类型--pair类型定义在#include <utility>头文件中,定义如下:
类模板:
template<class T1,class T2> struct pair
参数:T1是第一个值的数据类型,T2是第二个值的数据类型。
二、构造函数
pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1(v1, v2); //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
make_pair(v1, v2); // 以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型。
make_pair的用法
无需写出型别, 就可以生成一个pair对象
例:
std::make_pair(42, '@');
而不必费力写成:
std::pair<int, char>(42, '@')
当有必要对一个接受pair参数的函数传递两个值时, make_pair()尤其显得方便,
void function(std::pair<int, const char*>);
void foo{
function(std::make_pair(42, '@')); //pass two values as pair
}
三、使用
pair<int, double> p1;
p1 = make_pair(1, 1.2);
cout << p1.first << p1.second << endl;
//output: 1 1.2
int a = 8;
string m = "James";
pair<int, string> newone;
newone = make_pair(a, m);
cout << newone.first << newone.second << endl;
//output: 8 James
在某些清况函数会以pair对象作为返回值时,可以直接通过std::tie进行接收。比如
#include <utility>
#include <iostream>
using namespace std;
std::pair<std::string, int> getPreson() {
return std::make_pair("Sven", 25);
};
int main(int argc, char **argv) {
std::string name;
int ages;
std::tie(name, ages) = getPreson();
std::cout << "name: " << name << ", ages: " << ages << std::endl;
return 0;
}
参考:
https://blog.csdn.net/weixin_42825576/article/details/81571419
https://blog.csdn.net/sevenjoin/article/details/81937695
来源:https://blog.csdn.net/sinat_31608641/article/details/116572607


猜你喜欢
- 针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20&qu
- 使用SlidingTabLayout需要准备2个类,分别是 SlidingTabLayout,与SlidingTabStrip,,放进项目中
- GC简介何为GCGC(Garbage Collection)称之为垃圾回收,是对内存中的垃圾对象,采用一定的算法进行内存回收的一个动作。比方
- 单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应
- ResultSet 动态获取列名和值仅供自己方便查阅,无其他用途ResultSet result = null; //前边SQL查询结果,这
- 这篇文章主要介绍了Java继承方法重写实现原理及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言首次通过右滑来返回到上一个页面的操作是在 IOS7上出现。到目前android应用上支持这种操作的依然不多。分析其主要原因应该是andr
- 引言JVM进程消失可能有哪些原因?这个问题也是面试中经常出现的,如下图所示ps:由于两年多没写crud了,所以忘记mybatis怎么用了,所
- Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebW
- 读取xml配置bean(@ImportResource)1、应用场景旧框架SSM项目移行到SpringBoot中,xml配置文件很齐全,就可
- 一、原理区别:Java * 是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib
- 文件下载这种事情是很耗时的。之前使用AsyncTask这样的异步类来做下载,然后切到后台就 * 掉。所以打算试试Service。(不过按目前那
- 一.引言相信现在有很多小伙伴都已经很熟悉SpringBoot技术了。它大大地简化了Spring应用的开发,极大地提高了项目的开发效率,受到广
- 1. 查找1) 顺序查找 SeqSearch.java2) 二分查找【二分法,放在算法讲解】2. 顺序查找有一个数列:白眉鹰王、金毛狮王、紫
- 今天在开发的过程中,遇到java.lang.ExceptionInInitializerError异常,百度查了一下,顺便学习学习,做个笔记
- 如题,记录一些平常开发用的pom文件细节1.使用parent父类引用,解决依赖版本号不确定时自动匹配的问题<parent> &n
- Android中实现沉浸式状态栏的功能,供大家参考,具体内容如下1. 先上效果图,实现沉浸式状态栏有两种方式,一种是通过写Theme主题的方
- 作用mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${para
- 前言前段时间在写RPC框架的时候用到了Kryo、Hessian、Protostuff三种序列化方式。但是当时因为急于实现功能,就只是简单的的
- 第一个为大家分享的是C#字符串使用密钥进行加解密代码,具体内容如下public class DesEncrypt {