您的位置:

c++ map排序详解

一、基本介绍

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

#include  
#include 
    
using namespace std; 
int main() 
{ 
   map
    
      > myMap; //greater
       可以指定从大到小排序
   myMap[1] = 10; 
   myMap[2] = 20; 
   myMap[3] = 30; 
   for (map
       
        ::const_iterator it=myMap.begin(); it!=myMap.end(); ++it) cout << it->first << " " << it->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 << it->first << " " << it->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
        
         
          > myVector(myMap.begin(), myMap.end()); sort(myVector.begin(), myVector.end(), cmp); for (vector
          
           
            >::iterator it=myVector.begin(); it!=myVector.end(); ++it) cout << it->first << " " << it->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
        
         
          > myVector(myMap.begin(), myMap.end()); sort(myVector.begin(), myVector.end(), cmp); for (vector
          
           
            >::iterator it=myVector.begin(); it!=myVector.end(); ++it) cout << it->first << " " << it->second << endl; //输出结果:orange 30,banana 20,apple 10 return 0; }
           
          
         
        
       
      
     
    
  

五、小结

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