C++ 优先队列priority_queue及重载

       优先队列中的元素不同于一般先进先出的队列,被赋予了优先级,优先级队列具有最高级先出的行为特征,通常采用堆这种数据结构来实现。

基本操作如下:

priority_queue<node> pq;

pq.empty()      //队列为空返回true,否则返回false
 
pq.size()       //返回队列中元素的个数

pq.push()       //在基于优先级的适当位置插入新元素
 
pq.pop()        //删除队首元素,但不返回其值
 
pq.top()        //返回具有最高优先级的元素值,但不删除该元素

C++优先队列默认是大顶堆,即队列的输出序列是从大到小。

1.最基本的less和greater

priority_queue<int, vector<int>, less<int>> pq;            //从大到小
priority_queue<int, vector<int>, greater<int>> pq;         //从小到大

2.重载

struct node{
	int val;
	bool operator <(const node &b) const{
		return val > b.val;
	}
};
struct node{
	int val;
	friend bool operator <(const node &a, const node &b){
		return a.val > b.val;
	}
};
struct node{
	int val;
};

bool operator <(const node &a, const node &b){
	return a.val > b.val;
}

       上面三种方式都是按照数据从小到大的方式输出,我们可以这样理解:在比较node a和node b的时候,是通过小于的方式来进行的,即a < b是true or false,通过上面的三种方式,我们定义a.val > b.val的时候a < b,即a < b返回true,那么就认为b的优先级更高,默认是优先级更高的在前面,即b(val较小)会被先输出,实现了从小到大排序。

参考:https://blog.csdn.net/riba2534/article/details/53450085

此外,下面这种方式也可以实现重载:

struct cmp
{
    bool operator()(const node &a, const node &b){
        return a.val > b.val;
    }
};

priority_queue<node, vector<node>, cmp> pq;

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值