本题代码涉及到了多个陌生概念,题干如下:
代码;
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。
摘自代码随想录栈与队列总结: