优先队列 greater与less,
自定义还有结构体(可以设置2层优先级) 模板;
下面废话不多说直接上程序
注释的很明白
#include<iostream> #include<cstring> #include<algorithm> #include<functional> #define nn 100000005 #include<cstdio> #include<queue> using namespace std; queue<int > q; struct nood { int a,b; } p[nn],tmp; bool operator<(nood x,nood y) { return x.a>y.a; } /* bool operator<(int a,int b) { return a>b; } priority_queue<int > qqq; //自定义 优先级 */ // greater 小到大 less 大到小 //q.pop() 弹出最优元素 q.push()送入元素 //q.empty()判断队列是否为空 //q.size() 返回队列的长度 priority_queue<int,vector<int>,greater<int> > qq; priority_queue<int,vector<int>,less<int> >qw; int main() { int a[4]= {16,6,8,1}; for(int i=0; i<4; i++) qq.push(a[i]); for(int i=0; i<4; i++) { cout<<qq.top()<<endl; qq.pop(); } for(int i=0; i<4; i++) qw.push(a[i]); cout<<endl; cout<<qw.size()<<endl; /* for(int i=0; i<4; i++) { cout<<qw.top()<<endl; qw.pop(); } */ cout<<endl; while(!qw.empty()) { cout<<qw.top()<<endl; qw.pop(); } cout<<endl<<qw.size()<<endl; //结构体优先级排序 for(int i=0; i<5; i++) p[i].a=i; priority_queue<nood> stru; for(int i=0; i<5; i++) stru.push(p[i]); cout<<endl; cout<<stru.size()<<endl; cout<<endl; for(int i=0; i<5; i++) { tmp=stru.top(); cout<<tmp.a<<" "; stru.pop(); } cout<<endl<<stru.size()<<endl; /*priority_queue<nood,vector<nood>,greater<nood> > nod; for(int i=0; i<5; i++) nod.push(p[i].a); cout<<endl; for(int i=0; i<5; i++) cout<<nod.top()<<" "; cout<<nod.size()<<endl; for(int i=0; i<5; i++) nod.pop(); cout<<endl<<nod.size()<<endl;*/ return 0; }