0x00 前言
文章中的文字可能存在语法错误以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
0x01 pair简介
pair
是一种模板类型,一个pair
可以保存两个元素first
、second
,这两个元素没有类型的限制,可以是C++基本数据类型、结构体、类自定义类型。创建后的新元素为<first, second>
。
当一个函数需要返回2个或多个相同类型的数据的时候可以考虑使用数组,当一个函数需要返回2个不同类型、不同属性的数据的时候,可以考虑使用pair
。当需要返回多个不同类型、不同属性的数据的时候可以考虑使用tuple。
pair
类型定义在#include<utility>
头文件中,定义如下:
类模板:
template<
class T1,
class T2
> struct pair;
参数:
T1
是第一个值的数据类型,T2
是第二个值的数据类型。
功能:
将一对元素T
1、T2
组合成一个新元素<T1, T2>
,T1
和T
2没有类型限制,可以为不同的类型,通过pair
的两个共有函数first
和second
访问T1
和T2
。
0x02 pair创建和初始化
pair
对象创建时,需要指定两个类型名,类型名可以不同,例如:
pair<string, string> a; // 创建一个空对象a,两个元素类型都是string
pair<string, int> b; // 创建一个空对象 b, 两个元素类型分别是string和int类型
pair<string, vector<int> > c; // 创建一个空对象c,两个元素类型分别是string和vector类型
pair<int ,int >d (5,6); //创建d对象,两个元素类型都是int,并默认初始值为5,6
pair<int ,int > e= make_pair(5,6);//直接调用make_pair函数生成pair对象e,两个元素类型都是int,并默认初始值为5,6
pair<string,double> f ("aa",5.0);//创建f对象,两个元素类型是string,double 并默认初始值为"aa", 5.0
pair <string ,double> g = make_pair("aa",5.0);//直接调用make_pair函数生成pair对象g,两个元素类型是string,double 并默认初始值为"aa", 5.0
typedef pair<string,string> h; //若定义多个相同的pair类型对象,可以使用typedef简化声明
h h_1("aa","bb");
h h_2("cc","dd");
pair<int, double> i1(1, 1.1); //变量间接赋值
pair<int, double> i2 = i1;
pair<int, double> i3;
i3 = i1;
0x03 pair使用举例
例:pair
创建和初始化
#include <iostream>
#include<utility>
using namespace std;
int main() {
pair<int ,double> p;
p.first = 1;
p.second = 1.1;
cout<<"first value is " << p1.first << endl;
cout<<"second value is " << p.second << endl;
return 0;
}
运行结果:
first value is 1
second value is 1.1
我们使用pair
的构造函数之外也可以使用make_pair
函数来生成我们需要的pair
对象。make_pair
函数定义如下
template pair make_pair(T1 a, T2 b) { return pair(a, b); }
例:make_pair
使用
#include <iostream>
#include<utility>
using namespace std;
int main() {
int a = 1;
string b = "test";
pair<int, string> p;
p = make_pair(a, b);
cout<<"first value is " << p.first << endl;
cout<<"second value is " << p.second << endl;
return 0;
}
以上。
参考文档:
1.https://blog.csdn.net/sevenjoin/article/details/81937695
2.https://blog.csdn.net/dugaoda/article/details/50505023
3.https://www.apiref.com/cpp-zh/cpp/utility/pair.html
4.http://c.biancheng.net/view/7169.html