我正在尝试对具有Key作为String的映射进行排序,以及一对具有unsigned long long的映射,当我使用#include中的sort()方法时,我试图过度加载<运算符但是当我传递地图开头的地址并且结束时我无法访问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;
}
答案 0 :(得分:0)
如评论所示,一种方法是将地图复制到具有不同排序顺序的地图。
以下是完成此操作的一个小例子:
#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::map
声明中的第三个参数来指定分拣机谓词。
此外,std::copy
函数用于简单地将所有元素从源地图复制到目标地图。