优先队列呢,跟单调队列很像,顾名思义就是一个会自动排序的具有队列特性的数据结构,使用这个数据结构是为了找到队列中优先级最高的元素。
ps:优先队列会收下每个输入的元素,而单调队列会舍弃一些不合法的元素以达到优化的目的。使用单调队列是为了让整个队列中的元素保持单调。区别不是特别大,主要根据题目选择。
如果按我自己的理解呢,优先队列就是个堆,只不过不需要我们去手写,同时也只具备堆的一部分特性。使用优先队列我们同样可以完成堆的提取堆顶元素,提取 k 个元素的操作。
优先队列种类:
大致可分为以下三种:
priority_queue<node> q;//结构体队列
priority_queue<int, vector<int>, less<int> > q;//单减队列-->大根堆
priority_queue<int, vector<int>, greater<int> > q;//单增队列-->小根堆
ps:默认的priority_queue<int>为单减队列
//默认结构体队列,注意重载小于
#include<stdio.h>
#include<queue>
using namespace std;
struct node {
int x,y;
bool operator < (const node & a) const {
return x<a.x;
}
} s;
priority_queue <node> q;
int main() {
printf("读入:\n");