1、標頭檔
#include<queue>
2、定義
priority_queue<int> p;
3、優先輸出大資料
priority_queue<Type, Container, Functional>
Type為資料類型, Container為儲存資料的容器,Functional為元素比較方式。
如果不寫後兩個參數,那麼容器預設用的是vector,比較方式預設用operator<,也就是優先隊列是大頂堆,隊頭元素最大。
例如:
#include<iostream>#include<queue>using namespace std;int main(){priority_queue<int> p;p.push(1);p.push(2);p.push(8);p.push(5);p.push(43);for(int i=0;i<5;i++){cout<<p.top()<<endl;p.pop();}return 0;}
輸出:
4、優先輸出小資料
方法一:
priority_queue<int, vector<int>, greater<int> > p;
例如:
#include<iostream>#include<queue>using namespace std;int main(){priority_queue<int, vector<int>, greater<int> >p;p.push(1);p.push(2);p.push(8);p.push(5);p.push(43);for(int i=0;i<5;i++){cout<<p.top()<<endl;p.pop();}return 0;}
輸出:
方法二:自訂優先順序,重載預設的 < 符號
例子:
#include<iostream>#include<queue>#include<cstdlib>using namespace std;struct Node{int x,y;Node(int a=0, int b=0):x(a), y(b) {}};struct cmp{bool operator()(Node a, Node b){if(a.x == b.x)return a.y>b.y;return a.x>b.x;}};int main(){priority_queue<Node, vector<Node>, cmp>p;for(int i=0; i<10; ++i)p.push(Node(rand(), rand()));while(!p.empty()){cout<<p.top().x<<' '<<p.top().y<<endl;p.pop();}//while//getchar();return 0;}
輸出: