优先队列(priority queue)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。
在优先队列中,元素被赋予优先级(优先级可自己定义)。
当访问元素时,具有最高优先级的元素最先删除。
优先队列具有最高进先出 (largest-in,first-out)的行为特征。
在使用的时候 一定要有 <queue>的头文件。。。据学长介绍,STL里的东西 会用就行, 不要太深入理解。
今天刚学STL,小总结一下 优先队列的东西。。
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
///q.push (x);///将x接到队列的末端。
///q.top ();///访问队首元素
///q.pop ();///删除队首元素
///q.front();///访问队首元素 最早被压入队列的元素。
///q.back();///访问队尾元素 最后被压入队列的元素。
///q.size();///访问队列中的元素个数
///q.empty ();///判断是否为空 当队列空时,返回true。
struct cmp
{
bool operator () (int &a,int &b)
{
return a > b;///从小到大 如果想要从大到小 改成 '<'
}
};
struct node
{
int x;
bool operator < (const node &a) const
{
return a.x < x;///从小到大 如果想要从大到小 改成 '>'
}
}p;
int main()
{
int n,x;
///priority_queue <int>q;///默认从大到小排序输出
///priority_queue <int ,vector<int> , greater <int> >q;///从小到大排序输出 >>会被认为是错误 中间要加空格
///priority_queue <int,vector<int> ,less <int > >q;///从大到小
///priority_queue <int ,vector <int>, cmp>q;
priority_queue <node>q;
while (~scanf ("%d",&n))
{
while (!q.empty ())///使用的时候要先判断队列是否为空 不为空的话就清空。。
q.pop ();
for (int i = 0; i < n; i++)
{
/// scanf ("%d",&x);
/// q.push (x);
scanf ("%d",&p.x);
q.push (p);
}
while (!q.empty ())
{
//int s = q.top ();
struct node s = q.top ();
printf ("%d ",s.x);
q.pop ();
}
printf ("\n");
}
return 0;
}
参考博客:http://blog.chinaunix.net/uid-21712186-id-1818266.html
http://blog.csdn.net/u013476556/article/details/38372311