C++ STL priority_queue的使用

基本操作

priority_queue又称优先队列,实质就是一个堆结构,堆顶的元素是当前优先队列中优先级最高的那一个。
要使用优先队列,首先要包含下面两句话。

#include<queue>
using namespace std;

priority_queue的常用函数有

push()
top()
pop()
empty()
size()

和queue不同,优先队列不能使用front(),只能使用top()来读取堆顶元素。

优先级的设置

基本类型

优先队列对基本数据类型的优先级设置默认为数字大的优先级越高,如果是字符,那就是字典序大的优先级高。
以下两种写法等价。

priority_queue<int> q;
priority_queue<int, vector<int>, less<int> > q;

第二种写法的vector是用来承载堆底层的容器,第三个参数less表示数字大的优先级大,而如果用greater表示数字小的优先级大。

priority_queue<int, vector<int>, greater<int> > q;

自定义结构体类型

对自定义的结构体,只能重载"<",否则会发生编译错误。

struct fruit {
	string name;
	int price;
	fruit(string _name,int _price) {
		name=_name;
		price=_price;
	}
	friend bool operator < (const fruit &f1, const fruit &f2) {
		return f1.price < f2.price;
	}
};

int main(){
	priority_queue<fruit> q;
}

f1.price<f2.price 表示价格高的优先级高,如果希望价格低的优先级高,可以把返回值改为f1.price>f2.price,这里可以记忆为,默认的数据类型比较是大的更优先,所以当函数内的符号与重载符号相同,就是和默认的相同时,如果相反,那么就是小的优先。

也可以使用第二种方法来定义优先队列:

  1. 使用struct(注意这里也是一个结构体)定义一个cmp,然后在其内部实现比较函数。
  2. 重载的是一对小括号"()",而不是小于号"<"。
  3. 这里不是友元函数,没有friend关键字。
struct fruit {
	string name;
	int price;
	fruit(string _name,int _price) {
		name=_name;
		price=_price;
	}
};
struct cmp {
	bool operator () (const fruit &f1, const fruit &f2) {
		return f1.price > f2.price;
	}
};

int main() {
	priority_queue<fruit,vector<fruit>,cmp> q;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值