c++ pair(对组) 的用法

以下内容主要来自《c++标准程序库》和网上资料:

pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和 value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

1. pair对组定义于 <utility>

  tempate  <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.first),second(p.second){}

};

2 . Pair之间的比较:

两个Pair相互比较时,第一元素具有较高的优先级。

template <class T1,class T2>

bool operator == (const pair<T1,T2>& x, const pair<T1,T2>)

{

  return  (x.first ==y.first)  &&  (s.second ==y.second);

}

如果两个pair的第一元素不相等,其比较结果就成为整个比较行为的结果。如果第一元素相等,才继续比较第二元素。

template <class T1,class T2>

bool operator < (const pair<T1,T2>& x, const pair<T1,T2>& y)

{

  return  (x.first <y.first) || (!(y.first < x.first) && x.second < y.second)

}

bool operator > (const pair<T1,T2>& x, const pair<T1,T2>& y)

{

  return  (x.first >y.first) || (!(y.first > x.first) && x.second > y.second)

}

3. 便捷函数make_pair()

template <class T1,class T2>

pair<T1,T2>   make_pair(const T1& x, const T2& y)

{

  return pair<T1,T2>(x,y);

}

template函数make_pair()使你无需写出型别,就可以生成一个pair对象:

例如:

make_pair(100,"hun");

而不必费力的写:

pair<int, string> (100,"hun");

4.Pair的实例应用:

实例1:

#include <iostream>
#include <utility>
using namespace std;

int main()
{
  pair <int,string> phone(1882640,"Cking");
  pair <string,double> price("fish",10);
  pair <string,int>  pr1;
  pair <char,int> pr2;
  pair<string,int> pr3;
  pr1.first ="cx",
  pr1.second =200000;
  pr2=make_pair('#',100);
  pr3=pair<string,int>("pair",3);
  cout <<"phone:" <<phone.first <<", "<<phone.second <<endl;
  cout <<"price:" <<price.first <<", "<<price.second <<endl;
  cout <<"pr1:" <<pr1.first <<", " << pr1.second <<endl;
  cout <<"pr2:" <<pr2.first <<", " <<pr2.second <<endl;
  cout <<"pr3:" <<pr3.first <<", " <<pr3.second <<endl;
  return 0;
}

 

 

 

 

 

 

 

posted on 2014-04-13 19:14  敖天  阅读(1259)  评论(0)    收藏  举报

导航