您的位置:首页 > 产品设计 > UI/UE

Map的按value值排序

2016-05-15 15:20 357 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: