priority_queue

1.基本用法

优先队列是取优先权最高的队列,默认是大顶堆

priority_queue<int>q1,可实现自动排序

若想实现小顶堆,需补全其余参数:

priority_queue<int, vector<int>, greater<int> > q(注意最后两个<之间有空格)

如;POJ 3253,hdu 2547

#include<queue>
#include<cstdio>
using namespace std;
int main()
{
	int N,n,i;
	__int64 sum,n1,n2;
	while(scanf("%d",&N)!=EOF)//4 1 1 1 1=8,4+3+2=9(X)
	{
		priority_queue<__int64,vector<__int64>,greater<__int64> > q1;
		for(i=0;i<N;i++)
		{	
			scanf("%d",&n);
			q1.push(n);
		}
		sum=0;
		for(i=1;i<N;i++)//哈夫曼树思想
		{
			n1=q1.top(),q1.pop();
			n2=q1.top();q1.pop();
			q1.push(n1+n2);
			sum+=n1+n2;
		}
		printf("%I64d\n",sum);
	}
	return 0;
}


2.对自定义类型,需重载操作符‘<’

注意:先后(即先进入队列)顺序的排序

如:hdu 1873 看病要排队:http://acm.hdu.edu.cn/showproblem.php?pid=1873

priority_queue<int>q1

bool operator <(const struct partent &A,const struct partent &B)//注意此时默认是大顶堆,与sort()函数的comp函数不同
{
	if(A.pri==B.pri) return A.ID>B.ID;
	return A.pri<B.pri;
}

可实现在优先级(pri)相同时,先入先出;优先级不同时,优先级较大的先出


hdu 1509 Windows Message Queue:http://acm.hdu.edu.cn/showproblem.php?pid=1509

bool operator < (const struct message &A,const struct message &B)
{
	if(A.pri==B.pri)
		return A.num>B.num;
	else
		return A.pri>B.pri;
}
可实现在优先级(pri)相同时,先入先出;优先级不同时,优先级较小的先出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值