VMS Help
CXXLSTD, Containers, priority_queue

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   priority_queue  - A container	adapter	which behaves like a priority
   queue. Items	are popped from	the queue are in order with respect
   to a "priority."

 SYNOPSIS

   #include <queue>

   template <class T,
 	   class Container = vector<T>,
 	   class Compare = less<Container::value_type> >
   class	priority_queue;

 DESCRIPTION

   priority_queue is a container	adaptor	which allows a container to
   act	  as a priority queue.  This	means that the item with the
   highest  priority, as determined by	either the default comparison
   operator  (operator <) or the comparison Compare, is brought to the
   front of  the queue whenever anything is pushed onto or popped off
   the queue.

   priority_queue adapts	any container that  provides  front(),
   push_back() and pop_back().  In particular, deque	 and vector
   can	be used.

 INTERFACE

   template <class T,
 	   class Container = vector<T>,
 	   class Compare = less<typename Container::value_type>	>
   class	priority_queue {
   public:

   // typedefs
     typedef typename Container::value_type value_type;
     typedef typename Container::size_type size_type;
     typedef typename allocator_type allocator_type;

   //  Construct
     explicit priority_queue (const Compare& = Compare(),
 			     const allocator_type&=allocator_type());
     template <class InputIterator>
       priority_queue (InputIterator first,
 		      InputIterator last,
 		      const Compare& = Compare(),
 		      const allocator_type& = allocator_type());
     allocator_type get_allocator() const;
     bool empty () const;
     size_type size () const;
     const value_type& top () const;
     void push (const value_type&);
     void pop();
   };

 CONSTRUCTORS

   explicit priority_queue (const Compare& x = Compare(),
 	       const allocator_type& alloc = allocator_type());
 		  Default constructor.	Constructs a priority queue
                   that uses Container for	its underlying
                   implementation, x as its	standard for
                   determining priority, and the allocator alloc for
                   all storage management.

   template <class InputIterator>
   priority_queue (InputIterator	first, InputIterator last,
 	      const Compare& x = Compare(),
 	      const allocator_type& alloc = allocator_type());
      Constructs a new priority queue and places into it  every entity
      in the range [first, last).  The  priority_queue	will use x for
      determining the priority,  and  the allocator alloc  for all
      storage management.

 ALLOCATOR

   allocator_type get_allocator () const;
      Returns a copy of the allocator used by self for storage
      management.

 MEMBER FUNCTIONS

   bool
   empty	() const;
      Returns true if the priority_queue	is empty, false	otherwise.

   void
   pop();
      Removes the item with the highest priority	from the queue.

   void
   push (const value_type& x);
      Adds x to the queue.

   size_type
   size () const;
      Returns the number	of elements in the priority_queue.

   const	value_type&
   top () const;
      Returns a constant	reference to the element in the	queue with the
      highest priority.

 EXAMPLE

   //
   // p_queue.cpp
   //
    #include <queue>
    #include <deque>
    #include <vector>
    #include <string>
    #include <iostream.h>

   int main(void)
    {
      //	Make a priority	queue of int using a vector container
      priority_queue<int, vector<int>, less<int>	> pq;

      //	Push a couple of values
     pq.push(1);
     pq.push(2);

      //	Pop a couple of	values and examine the ends
     cout << pq.top() <<	endl;
     pq.pop();
     cout << pq.top() <<	endl;
     pq.pop();

      //	Make a priority	queue of strings using a deque container
      priority_queue<string, deque<string>, less<string>	>
        pqs;

      //	Push on	a few strings then pop them back off
     int	i;
     for	(i = 0;	i < 10;	i++)
      {
       pqs.push(string(i+1,'a'));
       cout << pqs.top()	<< endl;
      }
     for	(i = 0;	i < 10;	i++)
      {
       cout << pqs.top()	<< endl;
       pqs.pop();
      }

      //	Make a priority	queue of strings using a deque
      //	container, and greater as the compare operation
     priority_queue<string,deque<string>, greater<string> > pgqs;

      //	Push on	a few strings then pop them back off
     for	(i = 0;	i < 10;	i++)
      {
       pgqs.push(string(i+1,'a'));
       cout << pgqs.top() << endl;
      }

     for	(i = 0;	i < 10;	i++)
      {
       cout << pgqs.top() << endl;
       pgqs.pop();
      }

     return 0;
    }

   Output :
   2
   1
   a
   aa
   aaa
   aaaa
   aaaaa
   aaaaaa
   aaaaaaa
   aaaaaaaa
   aaaaaaaaa
   aaaaaaaaaa
   aaaaaaaaa
   aaaaaaaa
   aaaaaaa
   aaaaaa
   aaaaa
   aaaa
   aaa
   aa
   a
   a
   a
   a
   a
   a
   a
   a
   a
   a
   a
   a
   aa
   aaa
   aaaa
   aaaaa
   aaaaaa
   aaaaaaa
   aaaaaaaa
   aaaaaaaaa
   aaaaaaaaaa

 WARNING

   If your compiler does	not support default template parameters, you
   must always provide a Container template parameter, and a Compare
   template parameter  when declaring an instance	of
   priority_queue.  For	example, you would	not be able to write,

   priority_queue<int> var;

   Instead, you would have to write,

   priority_queue<int, vector<int>,
    less<typename vector<int>::value_type> > var;

 SEE ALSO

   Containers, queue

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help