首页 > 其他 > 详细

priority_queue实现

时间:2015-01-17 13:51:12      阅读:228      评论:0      收藏:0      [点我收藏+]
#include <algorithm>

using namespace std;
/*
priority_queue只允许在底端加入元素,并从顶端取出元素,
其内部元素不是依照被推入的次序排列,而是自动按照元素的权值排列,权值最大的元素排在最前面
缺省情况下priority_queue是利用一个max_heap完成
*/
template <class T,class Sequence=vector<T>,class Compare=less<typename Sequence::value_type>>
class priority_queue
{
public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::size_type size_type;
    typedef typename Sequence::reference reference;
    typedef typename Sequence::const_reference const_reference;
protected:
    Sequence c;//底层容器
    Compare comp;//元素大小比较标准
public:
    priority_queue() :c(){}
    explicit priority_queue(const Compare& x) :c(), comp(x){}

    //make_heap(),push_heap(),pop_heap()都是泛型算法
    template <class InputIterator>
    priority_queue(InputIterator first, InputIterator last, const Compare& x) : c(first, last), comp(x)
    {
        make_heap(c.begin(), c.end(), comp);
    }
    template <class InputIterator>
    priority_queue(InputIterator first, InputIterator last) : c(first,last)
    {
        make_heap(c.begin(), c.end(), comp);
    }

    void push(const value_type &x)
    {
        __STL_TRY{
        c.push_back(x);
        //重排heap
        push_heap(c.begin(), c.end(), comp);
    }
        __STL_UNWIND(c.clear());
    }

    void pop()
    {
        __STL_TRY{
        pop_heap(c.begin(), c.end(), comp);
        c.pop_back();
    }
        __STL_UNWIND(c.clear());
    }
};

 

priority_queue实现

原文:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/4230378.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!