Map的按value值排序

Posted Michael-zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map的按value值排序相关的知识,希望对你有一定的参考价值。

Map自带按Key值排序的属性,但很多种情况下我们需要对Map容器进行按Vaule值排序,由于Map没有提供相应的API,我们只有自力更生了。可以利用Pair和自定义排序函数实现,比如我们拿LeetCode上的347题为例,统计一组数中出现次数最多的K个数,代码如下:

//自定义的pair比较函数,此函数需要定义成全局函数,设计成按second值排序
bool cmp(pair<int,int> a,pair<int,int> b)
    return a.second>b.second;

class Solution 
public:
    vector<int> topKFrequent(vector<int>& nums, int k) 
        int len=nums.size();
        unordered_map<int,int> dict;
        vector<pair<int,int>> temp;
        vector<int> res;
        //首先利用map统计各个数出现的次数,然后放进vector中,进行按照pair的second值的排序
        for(int i=0;i<len;i++)
            dict[nums[i]]++;
        
        for(auto lt=dict.begin();lt!=dict.end();lt++)
            temp.push_back(*lt);
        
        sort(temp.begin(),temp.end(),cmp);

        for(int i=0;i<k;i++)
        res.push_back(temp[i].first);
        return res;
    
;

以上是关于Map的按value值排序的主要内容,如果未能解决你的问题,请参考以下文章

C++ STL中Map的按Key排序和按Value排序

C++ STL中Map的按Key排序和按Value排序

C++ STL中Map的按Key排序和按Value排序

如何对map中的value进行排序

C++ map排序(按照value值排序)

c++ map按key或value的值分别进行排序