priority_queue的用法
#include<iostream> #include<queue> using namespace std; typedef long long LL; typedef pair<int, int> P; struct node{ int x,y; node(){} node(int cx,int cy):x(cx),y(cy){} friend bool operator<(const node& a,const node& b) { return a.x > b.x; //由小到大 //反之, a.x < b.x //由大到小 } void out() { cout<<"("<<x<<","<<y<<")"<<endl; } }; void test_1() { priority_queue<LL,vector<LL>,greater<LL> > que;//由小到大出队 que.push(1); que.push(5); que.push(3); while(!que.empty()) { LL e=que.top();que.pop(); cout<<e<<endl; } } void test_2() { priority_queue<LL> que;//由大到小出队 que.push(1); que.push(5); que.push(3); while(!que.empty()) { LL e=que.top();que.pop(); cout<<e<<endl; } } void test_3() { priority_queue<P,vector<P>,greater<P> > que;//按first的值由小到大出队 //同理 priority_queue<P> 则结果按first的值由大到小出队 que.push(P(3,5)); que.push(P(1,3)); que.push(P(2,6)); while(!que.empty()) { P pr=que.top();que.pop(); cout<<pr.first<<" "<<pr.second<<endl; } } void test_4() { priority_queue<node> que; que.push(node(3,5)); que.push(node(1,3)); que.push(node(2,6)); while(!que.empty()) { node e=que.top();que.pop(); e.out(); } } int main() { test_4(); return 0; }