priority_queue用法總結
阿新 • • 發佈:2019-02-06
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; }
輸出: