贪心的基本应用 优先队列queue

优先队列(queue)

优先队列在头文件在#include<queue>里,同样的也需要加using namespace std;

基本格式为priority_ queue <结构类型>队列名

常用的几种:priority_queue<node>q;(node为结构体)

Proirity_queue<int,vector<int>,greater<int> >(注意,这里的‘> >’之间必须有空格,‘>>’是右移运算符)

队列里面的基本操作(在队列里面要用到的):

q.push();     在末尾插入

q.pop();     删除第一个元素

q.empty();   检查队列是否为空,空则返回1,不空返回0

q.top();   返回第一个元素

q.back();  返回末尾

q.size();   返回队列里的元素个数

 

Proirity_queue<int>q;默认的是从大到小排列的。(非结构体结构)

我们依然输入五个数看一下,代码如下:

#include<cstdio>
#include<queue>
using namespace std;
priority_queue<int>q;//定义队列q 
int main()
{
	q.push(7),q.push(9),q.push(3),q.push(1),q.push(2);//队列里面输入 7,9,3,1,2
	while(!q.empty())
	{
		printf("%d ",q.top());
		q.pop();
	}
	return 0;
}

如果是结构体的队列,如下:

node结构体有x,y规则是x小的则小,从小到大的排列为:

#include<queue>
#include<cstdio>
using namespace std;
struct node
{	
	int x,y;
	bool operator <(const node&a)const
	{
		return x<a.x;
	}
	}k;

	priority_queue<node>q;
	int main()
	{
		k.x=10,k.y=100;q.push(k);
		k.x=12,k.y=60;q.push(k);
		k.x=14,k.y=40;q.push(k);
		k.x=6,k.y=80;q.push(k);
		k.x=8,k.y=20;q.push(k);
		while(!q.empty())
		{
			node m=q.top();
			q.pop();
			printf("(%d,%d)",m.x,m.y);
		}
	}

答案为(14,40) (12,60) (10,100) (8,20) (6,80)

另外还有priority_queue<int , vector <int> ,less <int> >q;

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

Less是从大到小,greater是从小到大;代码如下:

#include<queue>
#include<cstdio>
using namespace std;
priority_queue<int , vector<int>,less<int> >q;
priority_queue<int , vector<int>,greater<int> >p;
int a[5]={7,9,3,1,2};
int main()
{
	for(int i=0;i<5;i++)
	{
		p.push(a[i]);
		q.push(a[i]);
	}
	printf("less:\n");
	while(!q.empty())
	{
		printf("%d ",q.top());q.pop();
	}
	printf("\ngreater:\n");
	while(!p.empty())
	{
		printf("%d ",p.top());p.pop();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/S123KO/article/details/82663671