1.模板原型
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() {}
template<class InputInterator>
priority_queue(InputIterator first, InputIterator last, const Compare& x):
c(first, last), comp(x) {make_heap(c.begin(), c.end(), comp);}
pirority_queue(InputItrator first, InputIterator last):c(first, last)
{make_heap(c.begin(), c.end(), comp);}
};
我们看看我们的top是啥
const_reference top() const {return c.front();}
就是vector的头部,然后让咱们看看push是啥
void push(const value_type& x)
{
__STL_TRY {
c.push_back(x);
push_heap(c.begin(), c.end(), comp);
}
}
相当于重建了一个堆, 测试如下
()