优先队列——priority_queue

优先队列是一个堆实现的
定义:priority_queue<T, Container < T>, Function < T> >
也可以不写后两部分内容,默认从大到小排序

T 就是数据类型,
Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector)
Function就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

priority_queue:优先队列,自动排序,默认为优先级较高的在前,但是要注意的是,它对int型变量的默认排序是从大到小,因为它认为值越大,优先级越高,与sort排序刚好相反。

1.对int型变量
priority_queue<int, vector < int > ,less < int > >从大到小排列
priority_queue<int , vector < int >,greater< int> >从小到大排列

2.对结构体排序,要重载一下 " < ",只能重载小于号
因为priority_queue默认的less,所以要想重载大于号,就需要把function改为greater,不过只重载一个小于号已经够用了。

从大到小排列

struct node{
	int x;
	int y;

	friend bool operator <  (const node & a,const node & b)
	{
		if(a.x!=b.x)
		return a.x<b.x;
		else
		return a.y<b.y;
	}	
};

priority_queue<node > q;

从小到大排列

struct node{
	int x;
	int y;

	friend bool operator <  (const node & a,const node & b)
	{
		if(a.x!=b.x)
		return a.x>b.x;
		else
		return a.y>b.y;

	}	
};

priority_queue<node > q;

从小到大排列也可以重载大于号

struct node{
	int x;
	int y;

	friend bool operator >  (const node & a,const node & b)
	{
		if(a.x!=b.x)
		return a.x>b.x;
		else
		return a.y>b.y;

	}	
};
priority_queue<node, vector<node> ,greater<node> > q;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值