一、Pair 类
pair类定义在<utility>中,定义如下:
template<class _Ty1,
class _Ty2>
struct pair
{
// store a pair of values
typedef pair<_Ty1, _Ty2> _Myt;
typedef _Ty1 first_type;
typedef _Ty2 second_type;
......
_Ty1 first; // the first stored value
_Ty2 second; // the second stored value
......
}
pair是一个类模板,定义为struct,因此内部成员都为public。
pair可以将两个value视为一个单元,C++中多处用到了pair类型。如容器:map、multimap、unorder_map、unorder_multimap都是以pair来管理其key/value形式的元素。
pair支持拷贝构造、移动构造(支持隐式转换),重载了赋值运算符及比较操作符。
p.first与get<0>(p)返回pair的第一个成员;p.second与get<1>(p)返回pair的第二个成员。注意:get()为C++11用法,需要使用支持C++11的编译器。
函数make_pair可以返回一个pair对象。
另外提供了一个p.swap(q)的成员函数和swap(p,q)的全局函数用于交换两个pair的值。
二、Tuple 类tuple是一个可变模板类,用于存储任意数量类型的实参。