C++STL之pair容器

STL新手点击:STL新手入门向

pair

STL的<utility>头文件中描述了一个看上去非常简单的模版类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较运算符模版函数。 

发现pair并没有单独行动的典型用法,正常都是配合map来使用(即把pair这个元素插入到map这个容器里面),以简单的理解为如下:map可以当做一个容器(装载具有一定格式的数据);pair可以理解为元素(放入到容器的的一个个个体。

创建pair对象

#include<utility>
using namespace std;
pair<int,int>p;

pair模版类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模版类对象有两个成员:first和second,分别表示首元素和尾元素。 
在<utility>中已经定义了pair上的六个比较运算符:<、>、<=、>=、==、!=,其规则是先比较first,first相等时再比较second,这符合大多数应用的逻辑。当然,也可以通过重载这几个运算符来重新指定自己的比较逻辑。 
除了直接定义一个pair对象外,如果需要即时生成一个pair对象,也可以调用在<utility>中定义的一个模版函数:make_pair。make_pair需要两个参数,分别为元素对的首元素和尾元素。

在map排序中使用pair

//按value自定义排序 
#include <iostream>  
#include <map>  
#include <vector>  
#include <algorithm>  
#include <utility>//pair的头文件 C++为什么pair不使用utility
//也可以运行可能是其他头文件中包含了utility头文件。比如map头文件 
using namespace std;
typedef pair<string, int> PAIR;  
  
bool cmp_by_value(const PAIR &x, const PAIR &y) {  
   return x.second>y.second;//按value降序排列 
   //return x.second<y.second;//按value升序排列 
}  
int main() {  
  map<string, int>mp;  
  mp["a"] = 7;  
  mp["c"] = 9;  
  mp["e"] = 2;  
  mp.insert(make_pair("d",10));  
  mp.insert(make_pair("b",8));  
 //把map中元素转存到vector中   
  vector<PAIR> v(mp.begin(),mp.end());   
  sort(v.begin(), v.end(), cmp_by_value);  
  for (vector<pair<string,int> >::iterator it=v.begin();it!=v.end();++it)  
   {  
    cout<<it->first<<'\t'<<it->second<<endl;  
   }
  return 0;  
}

猜你喜欢

转载自blog.csdn.net/love20165104027/article/details/81515746