1.基本介绍
优先队列的本质是堆,但它具有队列的所有操作特性,与普通队列不同的地方就是出队的时候按照优先级顺序出队,这个优先级即最大堆或最小堆的规则(即大的为top优先出队或小的为top优先出队),在队列的基础上加了个堆排序。
以O(log n) 的效率查找一个队列中的最大值或者最小值,其中是最大值还是最小值是根据创建的优先队列的性质来决定的。
priority_queue<int>pre;大的排前面
priority_queue<int, vector<int>, less<int>>s;//大的先出
priority_queue<int, vector<int>, greater<int>>s;//小的先出
#include <bits/stdc++.h>
2.基本函数
push() 插入元素到队尾并排序,时间复杂度为O(logN)
top() 访问队首元素,时间复杂度为O(1),使用前应先判断优先队列是否为空
pop 弹出队首元素,时间复杂度为O(logN),使用前应先判断优先队列是否为空
empty() 判断队列是否为空,时间复杂度为O(1)
size() 返回队内元素个数,时间复杂度为O(1)
emplace() 原地构造一个元素并插入队列
swap() 交换内容*-1
3. 特点
优先级排序:priority_queue中的元素按照一定的优先级进行排序。默认情况下,元素的优先级按照从大到小的顺序排列,也可以通过自定义的比较函数来指定不同的排序方式。
自动排序:在插入元素时,priority_queue会根据元素的优先级自动进行排序。每次插入新元素时,都会将新元素放置在正确的位置上。
取出优先级最高元素:priority_queue提供了一种方便的方式来取出优先级最高的元素。使用top()函数可以访问优先级最高的元素,而使用pop()函数可以将该元素从队列中移除。
底层实现采用堆:priority_queue通常使用堆(heap)数据结构来实现。堆是一种具有特定性质的二叉树,可以高效地插入新元素和取出优先级最高的元素。
动态大小:priority_queue的大小可以根据需要进行动态调整。可以随时插入新元素和删除已有元素,并在必要时自动重新排序。