C++ queue

首先说明一点,C++中stack和queue并不是容器,只是一套接口内部用什么容器来实现是可以指定的,默认是stack<T, deque<T>>和queue<T, deque<T>>,也可以用stack<T, vector<T>>等等

下面是具体用法

#include<queue>//头文件

priority_queue<int> que;//定义

que.push(x);//插入元素x

cout << que.size();//元素个数

while (!que.empty()) {//是否为空
cout << que.top() <<endl;//堆顶元素 
que.pop();//pop堆顶元素
}

默认是用大顶堆实现优先队列

如接连push 9,8,0,-5,1后会输出9,8,1,0,-5

若想改为小顶堆,可以设置greater参数(默认是less,大顶堆);如果想用vector存储,也可以自己设定,如下所示

priority_queue<int,vector<int>,greater<int>> que;
//这边 greater对应小顶堆,默认参数是less,对应大顶堆;
//vector是自己设定的存储数据的容器

此外,也可以自定义元素类型,这里需要对运算符进行重载,否则会报错

struct node{
    int x,y; 
    bool operator< (const node &b)const {
        return this->x < b.x;
    }
};

priority_queue<node> que;
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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值