Class Pair (本质是个结构体)可以将两个元素视为一个单元,在c++中经常能看见它的身影比如,map,multimap等等都是使用pair。任何的函数想返回一组数据也需要用到pair。
pair的构造和使用
pair<double, int > p;//使用默认的方式构造
//即double()和int()来构造两个值,输出 0,0
pair<int ,int> p(10,11);
pair<int,int> p2(p)//拷贝构造,也支持move构造
f({42,"test"});//可以使用初值列来初始化
p2=p//允许隐式转换
p<p2//先比较第一个元素,相等则比较第二个
p==p2
p1.swap(p2)//交换p1和p2的数据
如果你想打印pair,可以重载<<,如下的泛型函数模版
template <typename T1,typename T2>
std::ostream& operator <<(std::ostream & strm, const std::pair<T1, T2> & p)
{
return strm << "[" << p.first << "," << p.second << "]";
}
当使用比较频繁时候可以使用typedef简化
typedef pair<string, string> author;
autor ("sdad","adad");
数据的获得
pair<int ,int > p(10,10)
p.first//获得第一个值
p.second
get<0>(p)//获得第一个值
get<1>(p)
std::tuple_size<p>::value//获得元素的个数(2)
std::tuple_element<0,p>::type// 获得第一个元素的类型 (int)
make_pair
make_pair可以比较简单的得到一个pair,make_pair可以返回一个pair
cout <<make_pair(42, 11)<< endl;
pair<int,int> p=make_pair(42, 11);
make_pair的申明如下:
namespace std{
template <template T1 template T2>
pair <v1,v2> make_pair(T1 && x,T2 && y);
}