- PS:前面没用markdown,粘上来的代码连缩进都没有,没法看。。。
- 首先澄清一下优先队列和二叉堆之间的关系,这是基本的计算机科学理论知识;
- 优先队列是一种抽象数据结构,它的概念只关心它具有什么功能,而不关心这些功能是如何实现的;
- 优先队列最常用二叉堆实现;
- 形象地说,我们有一台黑箱,上面写着”优先队列“四个字,它带有实现优先队列功能(插入值,取出最值)的出入口;而拆开黑箱,里面是用二叉堆搭建的;
- 现在C++标准模板库容器除了双向链表(list)和并查集以外都允许在OI中使用,因而实现优先队列基本上不用手写,用
priority_queue
就可以了;
- 除非是应付笔试阅读题,需要熟悉手写二叉堆;
priority_queue
包含在头文件queue
中;
priority_queue
默认是大根堆,定义格式为priority_queue<T>
,其中T为基本数据类型或string
(理论上来说其它通用容器也能这样搞,但实际不常用,如有需要改日另论);
- 若需转为小根堆,需额外包含头文件vector,格式为
priority_queue< T,vector<T>,greater<T> >;
- 对于结构体,需要在结构体内重载<(小于号)运算符,代码如下:
#include<iostream>
#include<queue>
using namespace std;
struct Node{
int aa,bb;
bool operator<(const Node &anth)const
{