priority_queue用法小结

定义

又称优先队列,底层用堆实现。队首元素一定是优先级最高的那一个。
写法与其他STL相同

priority_queue<typename> name;

容器内元素的访问

和队列不同,优先队列没有front()、back()函数,而是只能通过top()函数来访问队首元素

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> q;
int main(){
	q.push(3);
	q.push(4);
	q.push(5);
	cout<<q.top()<<endl;
}

常用函数

push()

push(x)令x入队,O(logN).

top()

取队首元素.
使用之前,用empty()判断是否为空,否则kennel出现错误

pop()

令队首元素出队,O(logN)

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> q;
int main(){
	q.push(3);
	q.push(4);
	q.push(5);
	cout<<q.size()<<endl;
	while(!q.empty())
	q.pop();
	cout<<q.size();
}

empty()

size()

优先级设置

基本数据类型的设置

int、double、char一般是数字大(字典序大)的优先级高.

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

第二种定义方式中vector< int >填写的是用来承载底层数据结构堆(heap)的容器,与第一个参数相同.而第三个参数less< int >是对第一个参数的比较类,less< int >表示数字大优先级越大,而greater< int >表示数字小的优先级大

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

结构体的优先级设置

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
struct node{
	int x,y;
	bool operator<(const node&a) const{
		if(x!=a.x)
		return x<a.x;
		else return y>a.y;
	}
};
priority_queue<node> q;
int main(){
	node p;
	for(int i=1;i<=10;i++){
		p.x=i;p.y=i+1;
		q.push(p);
	}
	p.x=5;p.y=4;
	q.push(p);
	while(!q.empty()){
		cout<<q.top().x<<" "<<q.top().y<<endl;
		q.pop();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值