STL之priority_queue的使用

priority_queue说明:

优先队列的实现就不说了,运用的是堆的知识,前几篇博客已经有提到。现在讲讲如何在比赛的时候直接用STL里面的队列头文件中的priority_queue来帮我们解题。下文有两种使用方法,一种是运用#include中的greater和less来帮我们实现数据的排序。还有一种是自定义,也就是自己写排序方法让priority_queue来根据我们排序方法来排序。

代码:

#include
#include
#include
using namespace std;

const int maxn = 1001;
priority_queue,greater > q;
priority_queue,less > qu;

struct cmp   //自定义优先队列的顺序,按priority的编号排列
{
	friend bool operator < (cmp n1,cmp n2)
	{
		return n1.priority < n2.priority;  //从小到大排列
	}
	int priority;
	int value;
};
struct cmp1  //自定义优先队列的顺序,按priority的编号排序
{
	friend bool operator < (cmp1 n1,cmp1 n2)
	{
		return n1.priority > n2.priority;  //从大到小排序
	}
	int priority;
	int value;
};
int main()
{
	int num,m,num1,num2;
	/*
		--functional头文件中自带的排序方式(greater和less)
	*/
	cout<<"请输入m个数:"<>m;
	for(int i=0;i>num;
		q.push(num);
		qu.push(num);
	}
	cout<<"from small to large:"< que;
	priority_queue que1;
	cmp a[maxn];
	cmp1 b[maxn];
	/*
		以下为自己编写自定义排列方式
	*/
	cout<<"请输入m个数:"<>m;
	cout<<"请输入每个数的优先次序编号和它所对应的值:"<>num1>>num2;
		a[i].priority = num1;  //根据这个编号排列
		b[i].priority = num1;
		a[i].value = num2;   //值
		b[i].value = num2;
		que.push(a[i]);
		que1.push(b[i]);
	}
	cout<


运行结果:

functional头文件自带的排序功能运行结果:

STL之priority_queue的使用_第1张图片

自定义优先队列运行结果:

STL之priority_queue的使用_第2张图片

 优先队列实际题目(来自UVA1203 Argus)

你的任务是编写一个称为Argus的系统,该系统支持一个Register命令

Register Q_num Period

该命令注册了一个触发器,它每Period秒钟就会产生一次编号为Q_num的事件。你的任务是模拟出前k个事件。如果多个事件同时发生,先处理Q_num小的事件。

input

       输入仅包含一组数据。前若干行是Register命令,以“#”结尾;最后一行是整数k。对于每条命令,1<=Q_num,Period<=3000。k<=10000。命令条数n不超过1000.

output

       输出k行,即前k个事件的Q_num。

UVA1203代码如下:

#include
#include
#include

using namespace std;

struct Item{
	int QNum,Period,Time;
	bool operator < (const Item& a) const
	{
		return Time > a.Time || (Time == a.Time && QNum > a.QNum);
	}

};
int main()
{
	priority_queue pq;
	char s[20];

	while(cin>>s && s[0] != '#')
	{
		Item item;
		cin>>item.QNum>>item.Period;
		item.Time = item.Period;
		pq.push(item);
	}
	int K;
	cin>>K;
	while(K--)
	{
		Item r = pq.top();
		pq.pop();
		cout<

你可能感兴趣的:(c/c++,STL,数据结构与算法)