C++STL之Pair类模板
1. 简介
Pair表示“一对”的意思,pair将两个数据合成一组数据,在如下两种变成情况中,我们更加常见与使用pair,第一是使用STL中的map(在上一节讲过),对于map而言,key和value需要分开来进行使用和声明,使用pair可以合二为一(但是数据输出时依旧要分离),第二则是当我们的函数需要返回两个数据的时候,可以使用pair。
Pair的实现是一个结构体而不是一个类因此可以直接使用pair的成员变量。
总结一下:pair将一对值(可以有不同的数据类型)和为一个值
2. 相关文件
标准头文件 #include<utility>。
但是笔者亲测在编译器可以不声明这个头文件而直接使用,貌似在C++中,pair被放入了std命名空间中了。
3. 初始化
格式为:
template <class T1, class T2> struct pair;
在现实情况中我们可以像类似于STL创建新容器一样创建pair也可以直接使用,如下:
pair<int,int> p; pair<int,int> p(10,20);
或者是:
map<char,int> m; m.insert(pair<char,int>('a',10));
明白了如何初始化,接下来谈一下如何使用以及方法。
对与pair中的两个元素,我们可以使用first和second来进行访问,顾名思义first返回第一个元素,而second返回第二个元素,如:
pair<int,int> p(10,20); cout<<p.first<<" "<<p.second<<endl;
4. make_pair:
函数原型template pair make_pair(T1 a, T2 b) { return pair(a, b); }
我们可以通过make_pair生成我们的所需要的pair,对于一般的pair而言,我们如果需要对其进行赋值,则需要
pair<int,int> p; p.first=10,p.second=20;
但如果我们使用make_pair方法,则可以变成如下内容:
pair<int,int> p; p=make_pair(10,20);
可以看见,使用make_pair不仅仅让我们免去了对两个变量进行分开来的访问赋值,同时make_pair也智能的接受变量的类型,不需要再度指定,也就是说,make_pair本身是接受隐式类型转换的,比如定义的是一个int类型,使用make_pair传入一个float类型的参数,make_pair不会报错,而是回自动的进行一个类型转换,将float变为int,这样可以获得更高的灵活度,同时也会有一些小问题。
5.相关题目
与较难的BFS类型题目不同,本题不需要有BFS这样的搜索思路,而且本题目涉及到一个重要的内容,就是坐标,(x,y)在这类型的题目中,二维坐标往往采用一对数据进行表示,而本题目可以给自己增加要求,使用pair进行坐标的存储运算。
6. 举例——函数多返回值:
#include<iostream> #include<string> #include<utility> using namespace std; pair<string,int> getClass(int id){ return make_pair("DOTCPP!",id); } int main(int argc,char **argv){ pair<string,int> a; a=getClass(10); cout<<a.first<<" "<<a.second<<endl; return 0; }
输出内容:
DOTCPP! 10