优先队列(priority queue)是队列(queue)的一种,是0个或多个元素的集合,每个元素都有一个优先权或值,它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序。每次push和pop操作后,队列都会动态的调整,以达到我们预期的方式来存储。
优先队列执行的操作
1) 查找
2) 插入一个新元素
3) 删除
在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;
对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.
(优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行.)
示例
1.标准库默认使用元素类型的<操作符来确定它们之间的优先级关系 - 默认<操作符在整数中元素大的优先级高
1 | // 将元素5,3,2,4,6依次push到优先队列中 |
2.数据越小,优先级越高
1 | // 将元素5,3,2,4,6依次push到优先队列中 |
3.自定义优先级,重载比较符号
1 | struct node |
重载 > 号会编译出错,因为标准库默认使用元素类型的 < 操作符来确定它们之间的优先级关系。而且自定义类型的 < 操作符与 > 操作符并无直接联系
priority queue的基本使用代码
1 | #include<stdio.h> |
运行结果:
1 | 采用默认优先关系: |