源自: http://blog.sina.com.cn/s/blog_72a0bac20100qbg6.html

自己写了个小的Test:

 

  1. #include <iostream>  
  2. #include<vector>  
  3. using namespace std;  
  4.  
  5. typedef vector<pair<intint> > Type_vector;  
  6.  
  7. int main(int argc, char *argv[])  
  8. {  
  9.     vector<pair<intint> > xiaoqiang;  
  10.     xiaoqiang.push_back(make_pair(3,4));  
  11.       
  12.     //vector<pair<int, int> >::iterator iter;  
  13.           
  14.     Type_vector::iterator iter;   
  15.           
  16.     for(iter = xiaoqiang.begin(); iter!=xiaoqiang.end(); iter++)  
  17.     {  
  18.         cout<<iter->first<<" : "<<iter->second<<endl;     
  19.     }     
  20.     return 0;  

 

  1. std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。例如std::pair<int,float> 或者 std::pair<double,double>等。pair实质上是一个结构体,其主要的两个成员变量是first和second,这两个变量可以直接使用。初始化一个pair可以使用构造函数,也可以使用std::make_pair函数,make_pair函数的定义如下:  
  2.  
  3. template pair make_pair(t1 a, t2 b) { return pair(a, b); }  
  4.    
  5.  
  6. 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象。另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。但是这样会出现如下问题:例如有如下两个定义:  
  7.  
  8.    
  9.  
  10. std::pair<intfloat>(1, 1.1);  
  11.  
  12. std::make_pair(1, 1.1);  
  13.  
  14. 其中第一个的second变量是float类型,而make_pair函数会将second变量都转换成double类型。这个问题在编程是需要引起注意。下面是一段pair与make_pair的例子程序:  
  15.  
  16.  
  17. 1 #include <iostream>  
  18. 2 #include <utility>  
  19. 3 #include <string>  
  20. using namespace std;  
  21. 5   
  22. int main () {  
  23. 7 pair <string,double> product1 ("tomatoes",3.25);  
  24. 8 pair <string,double> product2;  
  25. 9 pair <string,double> product3;  
  26. 10   
  27. 11 product2.first = "lightbulbs"// type of first is string  
  28. 12 product2.second = 0.99; // type of second is double  
  29. 13   
  30. 14 product3 = make_pair ("shoes",20.0);  
  31. 15   
  32. 16 cout << "the price of " << product1.first << " is $" << product1.second << "\n";  
  33. 17 cout << "the price of " << product2.first << " is $" << product2.second << "\n";  
  34. 18 cout << "the price of " << product3.first << " is $" << product3.second << "\n";  
  35. 19 return 0;  
  36. 20 }  
  37. 其运行结果如下:  
  38.  
  39.  
  40. 1 the price of tomatoes is $3.25  
  41. 2 the price of lightbulbs is $0.99  
  42. 3 the price of shoes is $20  
  43. 为了更好的了解pair与make_pair的机制,下面是其定义:  
  44.  
  45. // template struct pair  
  46. template<class _ty1,class _ty2> struct pair  
  47. 3 { // store a pair of values  
  48. typedef pair<_ty1, _ty2> _myt;  
  49. typedef _ty1 first_type;  
  50. typedef _ty2 second_type;  
  51. 7   
  52. 8 pair(): first(_ty1()), second(_ty2())  
  53. 9 { // construct from defaults  
  54. 10 }  
  55. 11   
  56. 12 pair(const _ty1& _val1, const _ty2& _val2): first(_val1), second(_val2)  
  57. 13 { // construct from specified values  
  58. 14 }  
  59. 15   
  60. 16 template<class _other1,  
  61. 17 class _other2>  
  62. 18 pair(const pair<_other1, _other2>& _right)  
  63. 19 : first(_right.first), second(_right.second)  
  64. 20 { // construct from compatible pair  
  65. 21 }  
  66. 22   
  67. 23 void swap(_myt& _right)  
  68. 24 { // exchange contents with _right  
  69. 25 std::swap(first, _right.first);  
  70. 26 std::swap(second, _right.second);  
  71. 27 }  
  72. 28   
  73. 29 _ty1 first; // the first stored value  
  74. 30 _ty2 second; // the second stored value  
  75. 31 };  
  76. 32   
  77. 33   
  78. 34 template<class _ty1,class _ty2> inline 
  79. 35 pair<_ty1, _ty2> make_pair(_ty1 _val1, _ty2 _val2)  
  80. 36 { // return pair composed from arguments  
  81. 37 return (pair<_ty1, _ty2>(_val1, _val2));  
  82. 38 }