优先队列(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