map根据value从大到小排序

/**
     * map根据value值排序
     * @param map 
     * @param num num<0取全部的值,num>=0取前num个
     * @return
     */
    public static <K,V extends Comparable<? super V>> List<K> revsort(Map<K, V> map,int num){
        List<Map.Entry<K, V>> list = new ArrayList<Map.Entry<K,V>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
            @Override
            public int compare(Entry<K, V> o1, Entry<K, V> o2) {
                 return (o2.getValue()).compareTo( o1.getValue() );
            }
        });
         List<K> result = new ArrayList<K>();
         if(num<0){
            result.add(list.get(num).getKey());
            for(Entry<K, V> entry : list){
                result.add(entry.getKey());
            }
         }else{
             for(int i=0;i<num;i++){
                 result.add(list.get(i).getKey());
             }
         }
          System.out.println(result);

        return result;
    }


转载于:https://my.oschina.net/u/1169079/blog/517424

C++,你可以使用STL库的`std::map`和`std::multimap`来实现根据value大小排序的功能。 下面是一个示例代码: ```cpp #include <iostream> #include <map> #include <algorithm> int main() { std::map<std::string, int> myMap = { {"apple", 5}, {"banana", 2}, {"orange", 3}, {"pear", 1}, {"peach", 4} }; // 使用 lambda 表达式定义比较函数 auto cmp = [](const std::pair<std::string, int>& a, const std::pair<std::string, int>& b) { return a.second < b.second; }; // 定义 multimap,并将 map 的元素插入到 multimap std::multimap<std::string, int, decltype(cmp)> myMultimap(myMap.begin(), myMap.end(), cmp); // 遍历 multimap 输出排序后的结果 for (auto iter = myMultimap.begin(); iter != myMultimap.end(); ++iter) { std::cout << iter->first << " : " << iter->second << std::endl; } return 0; } ``` 这个示例,先定义了一个`std::map`,其包含了一些键对。然后,定义了一个lambda表达式作为比较函数,用于比较`std::pair`类型的元素(其`std::pair`的第一个元素是键,第二个元素是)。接着,定义了一个`std::multimap`,并将`std::map`的元素插入到`std::multimap`,同时指定了比较函数。最后,遍历`std::multimap`,输出排序后的结果。 需要注意的是,如果有多个元素的value相同,它们的顺序可能是不确定的。如果需要稳定排序,可以使用`std::stable_sort`函数对`std::vector`类型的元素进行排序,然后将排序后的元素插入到`std::multimap`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值