На этом шаге мы приведем строение класса priority_queue.
Типичная реализация класса priority_queue<>, как и реализации классов stack<> и queue<>, понятна без комментариев:
namespace std { template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue { public: typedef typename Container::value_type value_type; typedef typename Container::size_type size_type; typedef Container container_type; protected: Compare comp; // Критерий сортировки Container c; // Контейнер public: // Конструкторы explicit priority_queue(const Compare& cmp = Compare(), const Container& = Container()) : comp(cmp), c(cont) { make_heap(c.begin(),c.end(),comp); } void push(const value_type& x) { c.push_back(x); push_heap(c.begin(),c.end(),comp); } void pop() { pop_heap(c.begin(),c.end(),comp); c.pop_back(); } bool empty() const { return c.empty(); } size_type size() const { return c.size(); } const value_type& top() const { return c.front(); } }; }
Как видно из приведенного листинга, приоритетная очередь использует алгоритмы STL для работы с кучей, описанные в 307 шаге. В отличие от других контейнерных адаптеров для приоритетной очереди не определены операторы сравнения.
В следующих шагах приводятся более подробные описания членов класса priority_queue<>.
На следующем шаге мы рассмотрим определения типов, используемые в классе priority_queue.