STL 队列

1.4 优先队列(堆) priority_queue

include <queue>

1.4.1 构造

priority_queue<类型,容器,比较器>

  • 类型:要储存的数据类型
  • 容器:储存数据的底层容器,默认为 vector<T>,竞赛时保存默认即可
  • 比较器: 比较大小使用的比较器,默认为 less<T>,可以自定义
priority_queue<int> pque1;
priority_queue<int,vector<int>,greater<int>> pque2;//变小顶堆

自定义比较器尽量不用,容易犯迷糊

1.4.2 常用语法

作用用法示例
进堆.push(元素)que.push(1);
出堆.pop()que.pop();
取堆顶(最大值/最小值).top()int a = que.top();
查看大小/判空和vector一致

Note

进出堆复杂度,取堆顶

适用场景
  • 保持数据的有序性,每次向队列中插入大小不定的元素,或每次从队列取出最大/最小的元素,元素数量为,插入操作数量为
    • 使用快排:
    • 使用优先队列:

1.4.3 注意事项

  • 仅堆顶可读
cout << qpue[1] <<endl; //错误
  • 所有元素不可写
qpue[1] = 2;
pque.top() = 1;
//均为错误

但如果要修改堆顶元素

int tp = pque.top(); //保存堆顶
pque.pop(); //弹出堆顶
qpue.push(tp + 1); //通过保存的堆顶修改堆顶