Очередь с приоритетами (Priority queue)

Очередь с приоритетами (Priority queue)

Любая последовательность, с итератором произвольного доступа и поддерживающая операции front, push_back и pop_front, может использоваться для модификации priority_queue. В частности, могут использоваться vector и deque.

template ‹class Container, class Compare = less‹Container::value_type› ›

class priority_queue {

public:

 typedef Container::value_type value_type;

 typedef Container::size_type size_type;

protected:

 Container c;

 Compare comp;

public:

 priority_queue(const Compare& х = Compare()): c(), comp(х) {}

 template ‹class InputIterator›

 priority_queue(InputIterator first, InputIterator last,

 const Compare& х = Compare()): c(first, last), comp(x) {make_heap(c.begin(), с.end(), comp);}

 bool empty() const {return c.empty();}

 size_type size() const {return c.size();}

 const value_type& top() const {return c.front();}

 void push(const value_type& х) {

  c.push_back(х);

  push_heap(c.begin(), c.end(), comp);

 }

 void pop() {

  pop_heap(c.begin(), c.end(), comp);

  с.рор_bасk();

 }

}; // Никакое равенство не обеспечивается