c++ map排序详解(C++的map排序)

一、基本介绍

map是c++语言中的一个关联数组容器,可以在一个键和值之间建立一种映射关系。其中,键是唯一的,值可以重复。同时,map中的元素是按键自动排序的,排序方式可以通过自定义比较函数来实现。

#include  
#include  
using namespace std; 
int main() 
{ 
   map<int,int,greater > myMap; //greater 可以指定从大到小排序
   myMap[1] = 10; 
   myMap[2] = 20; 
   myMap[3] = 30; 
   for (map::const_iterator it=myMap.begin(); it!=myMap.end(); ++it) 
       cout <first << " " <second << endl; 
   return 0; 
} 

二、默认排序方式

默认情况下,map按键进行升序排序。以下代码演示了对map的默认排序方式。

#include  
#include  
using namespace std; 
int main() 
{ 
   map myMap; 
   myMap[1] = "apple"; 
   myMap[2] = "banana"; 
   myMap[3] = "orange"; 
   for (map::const_iterator it=myMap.begin(); it!=myMap.end(); ++it) 
       cout <first << " " <second << endl; 
   return 0; 
} 

三、自定义排序方式

可以通过标准库中的“less”或“greater”等来实现自定义排序。也可以通过自定义比较函数实现。

以下代码演示了如何使用自定义比较函数来实现对map按值进行降序排序。

#include  
#include  
#include  
using namespace std; 

bool cmp(const pair& a,const pair& b) 
{ 
   return a.second > b.second; 
} 

int main() 
{ 
   map myMap; 
   myMap["apple"] = 10; 
   myMap["banana"] = 20; 
   myMap["orange"] = 30; 
   vector<pair > myVector(myMap.begin(), myMap.end()); 
   sort(myVector.begin(), myVector.end(), cmp); 
   for (vector<pair >::iterator it=myVector.begin(); it!=myVector.end(); ++it) 
       cout <first << " " <second << endl; 
       //输出结果:orange 30,banana 20,apple 10
   return 0; 
} 

四、使用multimap排序

与map不同,multimap可以有重复的键,而且元素插入的顺序也会被保留。因此,multimap默认排序方式是按照插入的顺序而不是按键进行排序。以下代码演示了如何使用multimap进行按值排序。

#include  
#include  
#include  
using namespace std; 

bool cmp(const pair& a,const pair& b) 
{ 
   return a.second > b.second; 
} 

int main() 
{ 
   multimap myMap; 
   myMap.insert(make_pair("apple", 10)); 
   myMap.insert(make_pair("banana", 20)); 
   myMap.insert(make_pair("orange", 30)); 
   vector<pair > myVector(myMap.begin(), myMap.end()); 
   sort(myVector.begin(), myVector.end(), cmp); 
   for (vector<pair >::iterator it=myVector.begin(); it!=myVector.end(); ++it) 
       cout <first << " " <second << endl; 
       //输出结果:orange 30,banana 20,apple 10
   return 0; 
} 

五、小结

map是c++的一个重要容器,通过学习c++ map按照键或值排序,能够更好地理解和使用map。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平