C++ pair的用法案例详解
作者:物随心转 时间:2021-09-21 01:40:20
一、介绍
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
标签:C++,pair
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现简单文件过滤器功能
2021-09-13 23:27:58
![](https://img.aspxhome.com/file/2023/1/62111_0s.png)
Android自定义view实现车载可调整轨迹线
2022-12-06 11:22:21
Java日期时间操作的方法
2021-12-27 18:36:05
![](https://img.aspxhome.com/file/2023/7/108397_0s.jpg)
Java Lambda 表达式源码解析
2021-06-30 08:12:48
![](https://img.aspxhome.com/file/2023/8/76548_0s.png)
vs2005中总是保留最近打开的项目和文件的记录
2021-07-14 16:53:45
Java中避免NullPointerException的方法总结
2021-08-29 08:09:24
浅谈java实现背包算法(0-1背包问题)
2022-04-28 15:23:43
java自动装箱拆箱深入剖析
2023-09-03 08:45:19
C#截图程序类似腾讯QQ截图实现代码
2023-05-07 04:01:01
![](https://img.aspxhome.com/file/2023/1/100191_0s.jpg)
SWT(JFace)体验之模拟BorderLayout布局
2022-08-17 18:09:51
Java中的set集合是什么意思
2023-02-02 15:40:31
![](https://img.aspxhome.com/file/2023/9/119079_0s.png)
详解Spring Boot Admin监控服务上下线邮件通知
2023-06-16 21:53:31
spring boot 动态生成接口实现类的场景分析
2022-12-14 05:09:33
![](https://img.aspxhome.com/file/2023/7/64207_0s.png)
SpringBoot+Vue.js实现前后端分离的文件上传功能
2023-08-10 08:11:18
![](https://img.aspxhome.com/file/2023/1/72581_0s.png)
Android实现网易云音乐高仿版流程
2023-05-13 22:08:50
![](https://img.aspxhome.com/file/2023/2/92622_0s.png)
Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码
2023-10-05 04:20:53
![](https://img.aspxhome.com/file/2023/3/122303_0s.png)
Unity3D实现批量下载图片功能
2021-07-03 13:00:14
![](https://img.aspxhome.com/file/2023/3/106503_0s.png)
IDEA的默认快捷键设置与Eclipse的常用快捷键的设置方法
2023-04-09 18:32:40
![](https://img.aspxhome.com/file/2023/7/78007_0s.png)
Kotlin挂起函数原理示例剖析
2023-11-10 21:52:13
![](https://img.aspxhome.com/file/2023/0/113330_0s.jpg)
C#中抽象方法与虚拟方法的区别
2021-10-30 07:30:15