【C++ STL】 priority_queue(优先队列)

0x01.说明

  • priority_queue是STL所提供的一个非常有效的容器。
  • 优先队列包含在头文件 <queue> 中。
  • 优先队列由二项队列编写而成的。
  • 查找最大值最小值的效率为O(log N)
  • queue 不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队
  • 优先队列的本质是一个堆实现的。

0x02.定义

priority_queue< type, container, function >

三个参数依次为:

  • type: 数据类型;
  • container:实现优先队列的底层容器,必须是数组形式实现的容器,默认情况下(不加后面参数)是以 vector 为容器;
  • function: 元素之间的优先级顺序;

说明:

  • 在只使用第一个参数时,优先队列默认是一个最大堆,每次输出的堆顶元素是此时堆中的最大元素。

0x03.基本使用

优先队列的成员函数和队列基本相同,不过入队的优先级不同。

//小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//大顶堆
priority_queue <int,vector<int>,less<int> >q;
//需要头文件 #include <functional>

自定义优先级:

//使用函数重载默认的<
bool myCom(int a, int b) {
    return a>b;
}
priority_queue<int, vector<int>, function<bool(int,int)>> temp(myCom);     
//传入比较结构体,自定义优先级。
struct cmp{
    bool operator ()(int a,int b){    //通过传入不同类型来定义不同类型优先级
        return a>b;    //最小值优先
    }
};
auto my_comp = [](const int a, const int b){ return a > b; };
priority_queue<int, vector<int>, decltype(my_comp)> queue(my_comp);

ATFWUS --Writing By 2020–03–23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATFWUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值