我可以使用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