码迷,mamicode.com
首页 > 其他好文 > 详细

class priority_queue<> 简单介绍

时间:2015-08-19 19:42:11      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

今日发现要使用堆,然后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);
        }
    };

 

class priority_queue<> 简单介绍

标签:

原文地址:http://www.cnblogs.com/cycxtz/p/4742832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!