5.优先队列容器priority_queue

一. priority_queue(优先队列)的本质是一个堆,它允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面。

二. priority_queue有三个模板参数:priority_queue<Type, Container, Functional>,无特殊需求时后两个可以省略
①Type:为数据类型
②Container:为保存数据的容器,必须是用数组实现的容器,比如vector,deque等等,但不能用list,因为STL里面默认用的是vector
③Functional:为元素比较方式。如果是基本数据类型或已定义了比较运算符的类,可以直接用STL的less算子和greater算子,默认使用less算子,即从大到小排列,序列顶最大的先出队,如果使用greater算子,则队列按由小到大的顺序排列,出队时,序列顶的最小的元素先出队

下面将介绍priority_queue容器的一些常见用法:

1.关于priority_queue的初始化

(1)不添加任何算子,默认降序排列
priority_queue<int> pq;

(2)升序队列
priority_queue<int,vector<int>,greater<int>> pq;

(3)降序队列,和(1)一样
priority_queue<int,vector<int>,less<int>> pq;

2.向priority_queue中加入一个元素

pq.push(5);
pq.emplace(6);
//这两种写法都可以,后一种在某些时候更加高效

3.删除priority_queue的队首元素

pq.pop();

4.返回priority_queue的队首元素

pq.top();

5.判断priority_queue当前是否为空

pq.empty();

6.自定义比较算子

(1)重载操作符:
bool operator < (const node &a, const node &b) {  // 加上&是用引用传递,不加是按值传递,前者效率更高,但效果是一样的
    return a.value < b.value;  // 按照value值从大到小排列
}
priority_queue<node> pq;

(2)比较函数声明方式:
struct cmp {
    bool operator ()(const node &a, const node &b) {
        return a.value > b.value;  // 按照value值从小到大排列
    }
};
priority_queue<node, vector<node>, cmp> pq;

(3)结构体声明方式:
struct node {
    int value;
    friend bool operator<(const node &a, const node &b) {
        return a.value < b.value;  // 按value值从大到小排列
    }
};
priority_queue<node> pq;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值