本文主要简单介绍优先队列的原理和用法,便于快速学习和查阅。
原理
优先队列和队列一样,只能从队尾插入元素,从队首删除元素。
优先队列中最大元素始终位于队首,所以,出队时并非按照先进先出的原则,而是将当前队列中最大的元素出队。
可以重载"<"操作,重新定义比较规则。
实现
- 头文件
优先队列头文件与队列头文件一样,使用优先队列时别忘了加上queue
的头文件。
#include<queue>
- 定义
priority_queue<Data_Type> name;
Data_Type 为优先队列要存储的数据的类型,name 为该队列的名字。
例如:
priority_queue<int> pq; // 命名为pq的有限队列存储整型数据
- 插入元素
运用push()
成员函数将元素入队。
例如:
pq.push(1);
pq.push(2);
- 读取元素数量
用size()
成员函数返回当前优先队列中元素的数量。
pq.size();
- 判断队列是否为空
运用empty()
成员函数判断队列是否为空。若为空,返回逻辑真,否则返回逻辑假。
pq.empty();
- 读取队首元素
运用成员函数top()
返回队首元素。
pq.top();
注意:只能返回元素的值,而不能删除队首元素。
- 删除元素
运用成员函数pop()
将队首元素出队。
pq.pop();
注意:只能删除队首元素,而不能返回队首元素的值。
以上操作其实和队列操作类似,至于"<"的重载,本文暂时不做讲解。