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;
}

 

posted on 2015-11-01 11:35  vCoders  阅读(481)  评论(0编辑  收藏  举报

导航