【发布时间】:2017-01-09 10:20:22
【问题描述】:
我可以使用this 答案按值降序对无序映射进行排序。
但是,对同一作业使用集合失败:
#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;
}
运行以下测试:
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);
}
产生以下输出:
spark: 15
info: 3
the: 2
word: 1
谁能告诉我为什么 set (可能)会覆盖具有相同值的对?无论如何,这些对的键是不同的。
【问题讨论】:
-
因为它认为这两个元素是一样的
-
你为什么不用
std::sort? -
您的比较器帐户只有
unordered_map的值,而不是键。