从大到小排序;
#include<cstdio>
#include<queue>
using namespace std;
priority_queue <int> q;
int main()
{q.push(10),q.push(8),q.push(12),q.push(14),q.push(6);while(!q.empty())printf("%d ",q.top()),q.pop();
}输出 14 12 10 8 6
以及
priority_queue<pair<int,int>> q;// 按照ma.second实现大根堆for (auto it : ma) q.emplace(it.second,it.first);
建立了一个键值对,然后从大到小排序,此处是遍历 之前的map
例如下面这道优先级队列的题目
这里我们可以用map 来存储键值对,key 代表的是数字,val代表的次数
然后我们可以定义priority_queue 优先级队列,里面放的是pair队组,然后,遍历map将他按second排序,这样就是按次数排序,然后输出最大的次数的数字
代码如下
class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {vector<int>result;unordered_map<int,int>map1;for(auto a:nums){map1[a]++;}//建立优先级队列priority_queue<pair<int,int>>mq;//大顶堆,从大到小排序for(auto a:map1){// 按照mq.second实现大根堆mq.emplace(a.second,a.first);}while(k--){result.push_back(mq.top().second);//将出现字数最多的放到结果集里mq.pop();//最大值消灭}return result;}
};
OK