我可以使用this答案按值降序对无序地图进行排序。为什么STL设置覆盖值对具有相同的值
然而,使用一组同样的工作失败:
void Test_SortMap()
{
unordered_map<string, int> CountTable;
CountTable["word"] = 1;
CountTable["spark"] = 15;
CountTable["the"] = 2;
CountTable["mail"] = 3;
CountTable["info"] = 3;
CountTable["sandwich"] = 15;
SortHashTableByValueDescending(CountTable);
}
yiels以下的输出:
#include <set>
#include <functional>
#include <iostream>
using namespace std;
typedef pair<string, int> Pair;
typedef function<bool(Pair, Pair)> Comparator;
Comparator DescendingSortComparator = [](Pair pair1, Pair pair2) {
return pair1.second > pair2.second;
};
void SortHashTableByValueDescending(unordered_map<string, int> hashTable) {
set<Pair, Comparator> orderedSet(hashTable.begin(), hashTable.end(), DescendingSortComparator);
for (auto element : orderedSet)
cout << element.first << ": " << element.second << endl;
}
与下面的测试运行
spark: 15
info: 3
the: 2
word: 1
谁能请告诉我为什么设置(可能)覆盖具有相同值的对?无论如何,这些对的关键是不同的。
因为它认为这些2个元素是一样的 – Danh
为什么不使用'std :: sort'? – Danh
比较器仅记录'unordered_map'的值,但不包含键。 – ks1322