# Template Class `priority_queue<T, Cont, Comp>`

# Synopsis

    #include "boost/p_queue.hpp"

    template <class T,
              class Cont = std::vector<T>,
              class Comp = std::less<typename Cont::value_type> >
    class boost::priority_queue
    {
    public:
      typedef typename Cont::value_type      value_type;
      typedef typename Cont::size_type       size_type;
      typedef          Cont                  container_type;
      typedef typename Cont::reference       reference;
      typedef typename Cont::const_reference const_reference;

      typedef typename Cont::iterator        iterator;
      typedef typename Cont::const_iterator  const_iterator;

      explicit priority_queue(Comp const& comp = Comp());

      bool            empty() const;
      size_type       size() const;
      const_reference top() const;

      void push(const_reference val);
      void pop();
      void change_top(const_reference val);

      const_iterator begin() const;
      const_iterator end() const;
    };

# Description

The template class `priority_queue` is a replacement for the standard template class `std::priority_queue`. It has a slightly extended interface, namely the methods `begin()` and `end()` to get access to all elements currently stored in the priority queue and the method `change_top()` which is used for efficient modification of the largest element's priority.

The basic method to maintain the internal data structure is identical to that of d-heaps but for `priority_queue` the elements inserted into the priority queue are kept in the array. Thus, these are swapped. However, this removes the need to maintain a mapping between the elements in the heap and their position resulting a huge performance boost. On the other hand, this remove the possibility to change the priority of an arbitrary element because the elements cannot be found efficiently in the priority queue. If you never need to change the priority of an element except for the largest element this class is probably suitable. If you need only the methods also present for `std::priority_queue` you should probably stick to the standard class...

For a description of the methods of `priority_queue<T, Cont, Comp>` see the description of common methods.

# See Also

heap(3), heap-common(3)

Copyright © 1999 Dietmar Kühl (dietmar.kuehl@claas-solutions.de)
Claas Solutions GmbH