首先说明一点,C++中stack和queue并不是容器,只是一套接口。内部用什么容器来实现是可以指定的,默认是stack
下面是具体用法
#include//头文件 priority_queue que;//定义 que.push(x);//插入元素x cout << que.size();//元素个数 while (!que.empty()) {//是否为空 cout << que.top() < 默认是用大顶堆实现优先队列
如接连push 9,8,0,-5,1后会输出9,8,1,0,-5
若想改为小顶堆,可以设置greater参数(默认是less,大顶堆);如果想用vector存储,也可以自己设定,如下所示
priority_queue,greater > que; //这边 greater对应小顶堆,默认参数是less,对应大顶堆; //vector是自己设定的存储数据的容器 此外,也可以自定义元素类型,这里需要对运算符进行重载,否则会报错
struct node{ int x,y; bool operator< (const node &b)const { return this->x < b.x; } }; priority_queueque; que.push((node){x,y}); 如相继push(node){1,9}、(node){3,6}、(node){-2,4}、(node){8,2}后
不断输出que.top().x同时que.pop(),会输出8,3,1,-2,按照降序排列
若想从小到大排,可以修改重载函数,将"this->x < b.x"改成"this->x > b.x"
bool operator< (const node &b)const { return this->x > b.x; }想看视频演示的可以参考b站视频,讲的很清楚,C++-STL-priority_queue(堆/优先队列)的简单使用_哔哩哔哩_bilibili



