顺序容器适配器: 优先级队列
2023年12月23日 2023年12月23日
新加入的元素按优先级安排位置, 使用小于运算符 <
确定相对优先级
默认大顶堆, 出队顺序为优先级从高到低
小顶堆: 出队顺序为优先级从低到高
默认使用vector作为底层容器, 使用堆算法将vector中元素构造成堆结构
头文件
1#include <queue>
优先级队列支持的底层容器
顺序容器 | |
---|---|
array | X |
vector/string | O |
deque | O |
list | X |
forward_list | X |
要求底层容器支持随机访问
优先级队列操作与对底层容器的要求
底层实现 | ||
---|---|---|
pop | 优先级最高的元素出队 | pop_back |
top | 获取优先级最高的元素 | front |
push | 入队 | push_back |
emplace | 入队 | emplace_back |
1s.pop(); 2 3s.top(); 4 5s.push(item); 6 7s.emplace(args);
堆接口 | ||
---|---|---|
pop_heap | 将优先级最高的元素移动到容器尾部 | 先执行pop_heap, 再调用pop_back |
push_heap | 将元素按优先级排序, 存储为堆结构; 首元素优先级最高 | 先执行push_back/emplace_back, 再调用push_heap |
示例
1#include <iostream> 2#include <queue> 3 4using namespace std; 5 6int main() 7{ 8 // priority_queue<int> pq; // 大顶堆 9 // <=> 10 // priority_queue<int, vector<int>, less<int>> pq; 11 priority_queue<int, vector<int>, greater<int>> pq; // 小顶堆 12 13 pq.push(5); 14 pq.push(7); 15 pq.push(3); 16 17 while (!pq.empty()) 18 { 19 cout << pq.top() << "\t"; 20 pq.pop(); 21 } 22 return 0; 23} 24 25// 大顶堆出队顺序: 7 5 3 26// 小顶堆出队顺序: 3 5 7
便签
- |
---|
priority_queue及其底层实现 |
priority_queue和堆 |
priority_queue |