pair 的用法
- std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。
- C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。
- class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。
- pair被定义为struct,因此可直接存取pair中的个别值.。
- 两个pairs互相比较时, 第一个元素正具有较高的优先级.。
make_pair的用法
无需写出型别, 就可以生成一个pair对象
例:std::make_pair(42, '@');
而不必费力写成:std::pair<int, char>(42, '@')
pair与make_pair的应用
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。
pair的实现:
template<class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
// 默认构造函数
pair():first(T1()),second(T2()){}
// 构造函数
pair(const T1 &a, const T2 &b):first(a), second(b){}
// 拷贝构造函数
template<class U, class V>
pair(const pair<u, v> &p):first(p.fist), second(p.second)
{
cout<< "copy" << endl;
}
};
// 比较函数
template<class T1, class T2>
bool operator==(const pair<T1, T2> &p1, const pair<T1, T2>&p2)
{
return p1.first == p2.first && p1.second == p2.second;
}
template<class T1, class T2>
bool operator>(const pair<T1, T2> &p1, const pair<T1, T2>&p2)
{
return (p1.first > p2.first) || (!(p1.first < p2.first) && p1.second > p2.second);
}
template<class T1,class T2>
bool operator<(const pair<T1,T2>&s1,const pair<T1,T2>&s2)
{
return (s1.first<s2.first)||(!(s1.first>s2.first)&&s1.second<s2.second);
}
make_pair的简单实现:
//make_pair
template<typename T1, typename T2>
pair<T1, T2> make_pair(const T1 &f, const T2 &s)
{
return pair<T1, T2>(f, s);
}