C++/Data Structure/Priority Queue

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Demonstrate a priority_queue.

<source lang="cpp">

  1. include <iostream>
  2. include <queue>

using namespace std; int main() {

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

}

      </source>


PriorityQueue: push, pop and top

<source lang="cpp">

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

using namespace std; class Prioritize { public:

    int operator() ( const pair<string, unsigned int>& p1,
                     const pair<string, unsigned int>& p2 ) {
        return p1.second < p2.second;
    }

}; int main() {

    priority_queue< pair< string, unsigned int >,
       vector <pair< string, unsigned int > >, Prioritize >   pq;
    pq.push( pair<string, int>( "Event 1", 2) );
    pq.push( pair<string, int>( "Event 2", 10 ) );
    pq.push( pair<string, int>( "Event 3", 1 ) );
    while ( !pq. empty() ) { 
        cout << pq.top().first << endl;
        pq.pop();
    }
    return 0;

}

      </source>


Storing class objects in a priority_queue.

<source lang="cpp">

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

using namespace std; class Thread {

 int priority;
 string name;

public:

 Thread() { 
    name = ""; 
    priority = 0; 
 }
 Thread(string n, int p) { 
    name = n; 
    priority = p; 
 }
 string getname() const { 
    return name; 
 }
 int getpriority() const { 
    return priority; 
 }

}; // Determine priority. bool operator<(const Thread &a, const Thread &b) {

 return a.getpriority() < b.getpriority();

} int main() {

 priority_queue<Thread> q;
 
 q.push(Thread("F", 10));
 q.push(Thread("M", 2));
 // show priority
 cout << "Priorities: "; 
 while(!q.empty()) {
   cout << q.top().getname() << endl;
   cout << "            ";
   q.pop();
 }
 return 0;

}


      </source>


Using a different comparison function: greater

<source lang="cpp">

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

using namespace std; int main() {

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

}

      </source>