2016-04-15 113 views
-2

我想排序一个有一个键作为字符串,并有一个无符号long long对,当我使用sort()方法从#include我试图过载加载<运算符,但是当我通过地图和结束的开始地址我无法访问map.first,map.second.first,或map.second.second使用一个键和一对值对地图进行排序?

没有任何人有任何想法

map<string, pair<unsigned long long, unsigned long long>> ext_count; 
    sort(map.rbegin(), map.rend()); // to sort descending 
bool operator < (map<string, pair<unsigned long long, unsigned long long>>& lhs, map<string, pair<unsigned long long, unsigned long long>>& rhs) { 
return lhs.first < rhs.first; 

}

+2

嗯,地图是一个排序的容器。您无法对地图进行排序 – NathanOliver

+1

地图是有序的容器,不能被“排序” - 您只能定义一个排序顺序,该排序顺序将始终用于此地图。 – SergeyA

+0

那么我将如何更改排序顺序? – Nikes

回答

0

正如评论所建议的,一种方法是将地图复制到具有不同排序顺序的地图上。

这里是实现这个的一个小例子:我们使用的是第三个参数的std::map声明指定分拣机谓词

#include <map> 
#include <string> 
#include <algorithm> 
#include <iterator> 

// define the Sorter template class. If sortdir == true, then we sort ascending 
template <bool sortdir = true> 
struct Sorter 
{ 
    bool operator()(const std::string& left, const std::string& right) 
    { 
     if (sortdir) 
      return left < right; 
     return left > right; 
    } 
}; 

// our test maps 
typedef std::pair<unsigned long long, unsigned long long> mapDataType; 

// ascending map 
std::map<std::string, mapDataType, Sorter<>> myMap = 
          {{"abc", {0,0}}, {"def",{0,1}}}; 

// descending map 
std::map<std::string, mapDataType, Sorter<false>> myMap2; // descending map 

// sample program 
using namespace std; 
int main() 
{ 
    // copy ascending map to descending map 
    std::copy(myMap.begin(), myMap.end(), 
       std::inserter(myMap2, myMap2.begin())); 
} 

注意。

此外,std::copy函数用于将所有元素从源地图简单复制到目标地图。

Live Example

相关问题