优先队列(堆)STL 模板

#include<queue>
#include<iostream>
using namespace std;

priority_queue <int> q1; //默认大根堆


//小根堆:

struct cmp
{
	bool operator()(int &a,int &b)
	{
		return a>b; //'>'从小到大  从大到小改成 '<'
	}
};
priority_queue <int,vector<int>,cmp> q2; //重载运算符变小根堆



priority_queue <int,vector<int>,greater <int> >q3; //直接变小根堆  '>>'会被认为是错误 中间要加空格



//结构体: 


struct node{
	int x;
	int y;
	bool operator < (const node &a) const  //无论大小根,一定为 ' < ' 
	{
		if(x==a.x) return y>a.y;
		else return x>a.x; //'>'从小到大  从大到小改成 '<'
	}
};
priority_queue <node> q4; //定义结构体类型的堆(大根小根可控) 


int main()
{
	
	//q.push (x);  将x接到队列的末端
	//q.top ();  访问队首元素
	//q.pop ();  删除队首元素
	//q.front();  访问队首元素  最早被压入队列的元素
	//q.back();  访问队尾元素   最后被压入队列的元素
	//q.size();  访问队列中的元素个数
	//q.empty ();  判断是否为空   当队列空时,返回true
	
	
	//普通排序:
	
	int n,a[100];
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		q1.push(a[i]);
	}
	for(int i=1;i<=n;i++)
	{
		cout<<q1.top()<<" ";
		q1.pop();
	}
	
	
	//结构体排序: 
	
	int n2;
	node a2[100];
	cin>>n2;
	for(int i=1;i<=n2;i++)
	{
		cin>>a2[i].x;
	}
	for(int i=1;i<=n2;i++)
	{
		cin>>a2[i].y;
		q4.push(a2[i]);
	}
	for(int i=1;i<=n2;i++)
	{
		cout<<q4.top().x<<" "<<q4.top().y<<endl;
		q4.pop();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值