C++ Tutorial/queue stack/priority queue — различия между версиями

Материал из C\C++ эксперт
Перейти к: навигация, поиск
м (1 версия: Импорт контента...)
 
(нет различий)

Версия 17:21, 25 мая 2010

A priority_queue for integers

<source lang="cpp">#include <iostream>

  1. include <string>
  2. include <queue>
  3. include <stack>

using namespace std; int main() {

 priority_queue<int> pq;
 cout << "A priority_queue for integers.\n";
 pq.push(1);
 pq.push(3);
 pq.push(4);
 pq.push(2);
 cout << "retrieve those values in priority order.\n";
 while(!pq.empty()) {
   cout << "Popping ";
   cout << pq.top() << "\n";
   pq.pop();
 }
 cout << endl;
 return 0;

}</source>

A priority_queue with the Smallest Value at the Front Using a Predicate

<source lang="cpp">#include <queue>

  1. include <iostream>

int main () {

   using namespace std;
   priority_queue <int, vector <int>, greater <int> > pqIntegers;
   pqIntegers.push (10);
   pqIntegers.push (5);
   pqIntegers.push (-1);
   pqIntegers.push (20);
   cout << "The queue contains " << pqIntegers.size () << " elements";
   cout << endl;
   cout << "Element at the top: " << pqIntegers.top () << endl << endl;
   while (!pqIntegers.empty ())
   {
       cout << "pop the topmost element " << pqIntegers.top ();
       pqIntegers.pop ();
   }
   return 0;

}</source>

Get top() from priority_queue

<source lang="cpp">#include <iostream>

  1. include <string>
  2. include <queue>
  3. include <stack>

using namespace std; int main() {

 priority_queue<int> pq;
 cout << "A priority_queue for integers.\n";
 pq.push(1);
 pq.push(3);
 pq.push(4);
 pq.push(2);
 cout << "retrieve those values in priority order.\n";
 while(!pq.empty()) {
   cout << "Popping ";
   cout << pq.top() << "\n";
   pq.pop();
 }
 cout << endl;
 return 0;

}</source>

Instantiating an STL priority_queue: a priority queue of integers, doubles, and integers sorted using std::greater <>

<source lang="cpp">#include <queue> int main () {

   using namespace std;
   // A priority queue of integers sorted using std::less <> (default)
   priority_queue <int> pqIntegers;
   // A priority queue of doubles
   priority_queue <double> pqDoubles;
   // A priority queue of integers sorted using std::greater <>
   priority_queue <int, deque <int>, greater <int> > pqIntegers_Inverse;
   return 0;

}</source>

priority_queue of double

<source lang="cpp">#include <iostream> using std::cout; using std::endl;

  1. include <queue>

int main() {

  std::priority_queue< double > priorities;
  
  priorities.push( 3.2 );
  priorities.push( 9.8 );
  priorities.push( 5.4 );
  cout << "Popping from priorities: ";
  
  while ( !priorities.empty() ) 
  {
     cout << priorities.top() << " ";
     priorities.pop();
  }
  cout << endl;
  return 0;

}</source>

Popping from priorities: 9.8 5.4 3.2

priority_queue of int: top, pop, empty()

<source lang="cpp">#include <queue>

  1. include <iostream>

using namespace std; int main(int argc, char** argv) {

 priority_queue<int> myQueue;
 myQueue.push(3);
 myQueue.push(4);
 myQueue.push(2);
 myQueue.push(1);
 while (!myQueue.empty()) {
   cout << myQueue.top() << endl;
   myQueue.pop();
 }
 return (0);

}</source>

priority_queue of int, vector of int and greater

<source lang="cpp">#include <queue>

  1. include <functional>
  2. include <iostream>

using namespace std; int main(int argc, char** argv) {

 priority_queue<int, vector<int>, greater<int> > myQueue;
 myQueue.push(3);
 myQueue.push(4);
 myQueue.push(2);
 myQueue.push(1);
 while (!myQueue.empty()) {
   cout << myQueue.top() << endl;
   myQueue.pop();
 }
 return (0);

}</source>

priority_queue: pop

<source lang="cpp">#include <iostream>

  1. include <queue>

using namespace std; int main() {

 int thedata[] = {45, 34, 56, 27, 71, 50, 62};
 priority_queue<int> pq;  
 cout << "The priority_queue size is now " << pq.size() << endl;
 
 cout << "Pushing 4 elements " << endl;
 for (int i = 0; i < 4; ++i)
   pq.push(thedata[i]);
 cout << "The priority_queue size is now " << pq.size() << endl;
 cout << "Popping 3 elements " << endl;
 for (int i = 0; i < 3; ++i) {
   cout << pq.top() << endl;
   pq.pop();
 }
 cout << "The priority_queue size is now " << pq.size() << endl;
 return 0;

}</source>

The priority_queue size is now 0
Pushing 4 elements
The priority_queue size is now 4
Popping 3 elements
56
45
34
The priority_queue size is now 1

priority_queue: push and size

<source lang="cpp">#include <iostream>

  1. include <queue>

using namespace std; int main() {

 int thedata[] = {45, 34, 56, 27, 71, 50, 62};
 priority_queue<int> pq;  
 cout << "The priority_queue size is now " << pq.size() << endl;
 
 cout << "Pushing 4 elements " << endl;
 for (int i = 0; i < 4; ++i)
   pq.push(thedata[i]);
 cout << "The priority_queue size is now " << pq.size() << endl;
 return 0;

}</source>

The priority_queue size is now 0
Pushing 4 elements
The priority_queue size is now 4

priority_queue: push, pop, top, empty

<source lang="cpp">/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <queue>

using namespace std; int main() {

   priority_queue<float> q;
   // insert three elements into the priority queue
   q.push(66.6);
   q.push(22.2);
   q.push(44.4);
   // read and print two elements
   cout << q.top() << " ";
   q.pop();
   cout << q.top() << endl;
   q.pop();
   // insert three more elements
   q.push(11.1);
   q.push(55.5);
   q.push(33.3);
   // skip one element
   q.pop();
   // pop and print remaining elements
   while (!q.empty()) {
       cout << q.top() << " ";
       q.pop();
   }
   cout << endl;

}</source>

66.6 44.4
33.3 22.2 11.1

priority_queue: top

<source lang="cpp">#include <iostream>

  1. include <queue>

using namespace std; int main() {

 int thedata[] = {45, 34, 56, 27, 71, 50, 62};
 priority_queue<int> pq;  
 cout << "The priority_queue size is now " << pq.size() << endl;
 
 cout << "Pushing 4 elements " << endl;
 for (int i = 0; i < 4; ++i)
   pq.push(thedata[i]);
 cout << "The priority_queue size is now " << pq.size() << endl;
 cout << "Popping 3 elements " << endl;
 for (int i = 0; i < 3; ++i) {
   cout << pq.top() << endl;
   pq.pop();
 }
 cout << "The priority_queue size is now " << pq.size() << endl;
 cout << "Popping all elements" << endl;
 while (!pq.empty()) {
   cout << pq.top() << endl;
   pq.pop();
 } 
 cout << "The priority_queue size is now " << pq.size() << endl;
 return 0;

}</source>

The priority_queue size is now 0
Pushing 4 elements
The priority_queue size is now 4
Popping 3 elements
56
45
34
The priority_queue size is now 1
Popping all elements
27
The priority_queue size is now 0