class priority_queue<> 简单介绍

今日发现要使用堆,然后priority_queue 使用的恰好是堆,默认是大根堆,这样的话,如果遇到需要用到大根堆,小根堆来处理问题的时候,可以使用这个结构。

常用方法与队列差不 push(),pop(),top()

上一部分代码,可以看出默认比较是 less 所以是大根堆,默认的话,里面的容器是vector

template<class _Ty,
    class _Container = vector<_Ty>,
    class _Pr = less<typename _Container::value_type> >
    class priority_queue
    {    // priority queue implemented with a _Container
public:
    typedef priority_queue<_Ty, _Container, _Pr> _Myt;
    typedef _Container container_type;
    typedef typename _Container::value_type value_type;

    protected:
    _Container c;    // the underlying container
    _Pr comp;    // the comparator functor

    priority_queue(const _Pr& _Pred, const _Container& _Cont)
        : c(_Cont), comp(_Pred)
        {    // construct by copying specified container, comparator
        make_heap(c.begin(), c.end(), comp);
        }

    void push(value_type&& _Val)
        {    // insert element at beginning
        c.push_back(_STD move(_Val));
        push_heap(c.begin(), c.end(), comp);
        }

    bool empty() const
        {    // test if queue is empty
        return (c.empty());
        }

    size_type size() const
        {    // return length of queue
        return (c.size());
        }

    const_reference top() const
        {    // return highest-priority element
        return (c.front());
        }

    void push(const value_type& _Val)
        {    // insert value in priority order
        c.push_back(_Val);
        push_heap(c.begin(), c.end(), comp);
        }

    void pop()
        {    // erase highest-priority element
        pop_heap(c.begin(), c.end(), comp);
        c.pop_back();
        }

    void swap(_Myt& _Right)
        {    // exchange contents with _Right
        _Swap_adl(c, _Right.c);
        _Swap_adl(comp, _Right.comp);
        }
    };

 

转载于:https://www.cnblogs.com/cycxtz/p/4742832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值