Map 按值排序

来源:互联网 发布:知耻近乎勇下一句 编辑:程序博客网 时间:2024/05/20 23:40
 类似的C++代码:

typedef pair<stringint> PAIR;
int cmp(const PAIR& x, const PAIR& y)
{
    return x.second > y.second;
}

map
<string,int> m;
vector
<PAIR> vec;
for (map<wstring,int>::iterator curr = m.begin(); curr != m.end(); ++curr)
{
    vec.push_back(make_pair(curr
->first, curr->second));
}
sort(vec.begin(), vec.end(), cmp);

上面方法的实质意义是:将Map结构中的键值对(Map.Entry)封装成一个自定义的类(结构),或者直接用
Map.Entry类。自定义类知道自己应该如何排序,也就是按值排序,具体为自己实现Comparable接口或构造一个Comparator对象,然后不用Map结构而采用有序集合(SortedSet, TreeSet是SortedSet的一种实现),这样就实现了Map中sort by value要达到的目的。就是说,不用Map,而是把Map.Entry当作一个对象,这样问题变为实现一个该对象的有序集合或对该对象的集合做排序。既可以用SortedSet,这样插入完成后自然就是有序的了,又或者用一个List或数组,然后再对其做排序(Collections.sort() or Arrays.sort())。