本题代码涉及到了多个陌生概念,题干如下:
代码;
class Solution {
public:class mycomparison{//自定义规则,使优先队列可以自动排序public:bool operator()(pair<int, int> & lhs, pair<int, int> & rhs){return lhs.second > rhs.second;}};vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int> map;for(int i = 0; i < nums.size(); i++){map[nums[i]]++;}priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison>p_q;for(unordered_map<int, int> :: iterator it = map.begin(); it != map.end(); it++){p_q.push(*it);//向p_q传入it所指对象if(p_q.size() > k){p_q.pop();}}vector<int>res(k);for(int i = k - 1; i >=0; i--){res[i] = p_q.top().first;p_q.pop();}return res;}
};
内部类mycomparison可以规定优先队列的排序规则
定义优先队列;
每遍历一次map,向p_q中push一次it所指对象,即*it。
别把first写成front。
摘自代码随想录栈与队列总结: