priority_queue基础用法

template< class T, class Sequence=vector<T>, class Compare=less<typename Sequence::value_type> >

主要总结了几种比较函数cmp的写法

//eg.1.***********************************
struct node {
     int id;
     int w;
     //...
};
struct cmp {
     bool operator() (const node &a, const node &b)
     {
         return a.w > b.w;//大顶堆
     }
};
priority_queue<node, vector<node>, cmp> que;

node a;
que.push(a);
cout<<que.top().id;
que.pop();
//return就是希望如何排列为true。如果希望由大到小,就将大到小的情况return;反则亦然。和sort的自定义cmp是一样的。
//eg.2.***********************************
struct node
{
    int id;  
    int w; 
    //...
    friend bool operator> (const node& a,const node& b)
    {
        return (a.w > b.w);  
    } 
    friend bool operator< (const node& a,const node& b)
    {
        return (a.w < b.w);  
    }
};
priority_queue<node, vector<node>, greater<node> > que;//注意两个>之间的空格;默认大顶堆
priority_queue<node, vector<node>, less<node> > que;
//或者可以只定义一个小于号,直接写
struct node
{
    int id;  
    int w; 
    friend bool operator< (const node& a,const node& b)
    {
        return (a.w < b.w);  
    }
};priority_queue<node> que;
//eg.3.***********************************
struct Node
{
    Node(int _x):x(_x){}
    int x;
}; 
bool operator<(const Node &a, const Node &b)
{
    return a.x>b.x;
} 
priority_queue<Node> heap;    //大顶堆
//eg.4.***********************************
struct Node//(指针版)
{
     int h;
     int l;
}; 
struct cmp
{
    bool operator () (Node const *x, Node const *y)
    {
        if(x->h == y->h)
            return x->l > y->l;
        return x->h > y->h;
    }
}; 
priority_queue<Node*, vector<Node*>, cmp> que;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值