仅以本文记录笔者在学习优先队列之后的一些用法归纳,文末有一些推荐的题单
优先队列
声明:
在有以下头文件的情况下,可以使用优先队列
#include<queue>
using namespace std;
笔者则是常用万用库:
#include<bits/stdc++.h>
using namespace std;
最常规的声明方式是以下这种:
priority_queue<结构类型> 队列名;
priority_queue<int> q;
priority_queue<double> s;
其中的结构类型可以是自定义的结构体
priority_queue<node> q;
特性:
相信来阅读此篇文章的读者都对优先队列的特性有所耳闻,便是自动排序(默认从大到小排序) 通过以下写法可以控制队列是由小到大货由大到小排序
priority_queue <int,vector<int>,less<int> > p;//从大到小
priority_queue <int,vector<int>,greater<int> > q;//从小到大
而对于结构体,我们通常通过重载’<'完成对排序顺序的控制,实例如下:
struct node
{
int x,y;
bool operator < (const node & a) const
{
return x<a.x;
}
};
操作:
优先队列的一些基础操作和队列几乎一致:
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素
尾声:
优先队列操作简便,但功能强大,在优先队列的帮助下我们能解决许多问题。
刷题指北
关于熟悉优先队列的使用,个人的一些题目推荐(为了方便大家提交,下面放的都是luogu链接):
洛谷P3887 世界杯:2014广东省选 普及- 优先队列的入门级题目
洛谷P1090 合并果子 :2004 NOIp提高组 普及/提高-
CF1114B Yet Another Array Partitioning Task 1500 普及-
CF1140C Playlist:1600 提高+/省选-(此题略有挑战)