C++ 優先佇列 priority_queue 的基本使用方法【定義優先順序】
阿新 • • 發佈:2019-01-03
之前是轉載的,可是覺得那種方式對我不太好用,所以再學一個其他的優先順序排序方式;
結構體元素的優先順序排序方式:
#include<cstdio>
#include<queue>
using namespace std;
priority_queue<int> big; //大根堆
priority_queue<int,vector<int>,greater<int> > small; //小根堆,最後的兩個“>”之間要有空格,vector不用單另開標頭檔案。
C++中優先佇列(priority queue<>)使用標頭檔案queue,需要宣告using namespace std;
常用來代替堆,每次直接加入新數即可,自動維護大小順序,使用很方便。
以大根堆為例,q.top( )是隊中最大的數。常用操作還有:q.push_back(x),q.pop( ) …
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int s,b; bool operator < (const node &x) const { if(x.s!=s) return x.s>s; //從小到大 else return x.b<b; //從大到小 } }A[100]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&A[i].s,&A[i].b); } sort(A+1,A+1+n); for(int i=1;i<=n;i++) { printf("%d %d\n",A[i].s,A[i].b); } return 0; } /* 5 1 2 2 3 3 4 3 1 3 6 */
另外帶有結構體優先順序排序的題目連結: