Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Priority Queue in C++ Standard Template Library (STL)

  • Difficulty Level : Easy
  • Last Updated : 17 Dec, 2021

Priority queues are a type of container adapters, specifically designed such that the first element of the queue is the greatest of all elements in the queue and elements are in nonincreasing order (hence we can see that each element of the queue has a priority {fixed order}). Following is an example to demonstrate the priority queue and its various methods.
 

CPP




// CPP Program to demonstrate Priority Queue
#include <iostream>
#include <queue>
using namespace std;
 
void showpq(priority_queue<int> gq)
{
    priority_queue<int> g = gq;
    while (!g.empty()) {
        cout << '\t' << g.top();
        g.pop();
    }
    cout << '\n';
}
 
// Driver Code
int main()
{
    priority_queue<int> gquiz;
    gquiz.push(10);
    gquiz.push(30);
    gquiz.push(20);
    gquiz.push(5);
    gquiz.push(1);
 
    cout << "The priority queue gquiz is : ";
    showpq(gquiz);
 
    cout << "\ngquiz.size() : " << gquiz.size();
    cout << "\ngquiz.top() : " << gquiz.top();
 
    cout << "\ngquiz.pop() : ";
    gquiz.pop();
    showpq(gquiz);
 
    return 0;
}
Output
The priority queue gquiz is :     30    20    10    5    1

gquiz.size() : 5
gquiz.top() : 30
gquiz.pop() :     20    10    5    1

Note: By default, C++ creates a max-heap for priority queue.

How to create a min-heap for the priority queue? 

C++ provides the below syntax for the same.  

Syntax:

priority_queue <int, vector<int>, greater<int>> g = gq;  

CPP




// C++ program to demonstrate min heap for priority queue
#include <iostream>
#include <queue>
using namespace std;
 
void showpq(
    priority_queue<int, vector<int>, greater<int> > gq)
{
    priority_queue<int, vector<int>, greater<int> > g = gq;
    while (!g.empty()) {
        cout << '\t' << g.top();
        g.pop();
    }
    cout << '\n';
}
 
// Driver Code
int main()
{
    priority_queue<int, vector<int>, greater<int> > gquiz;
    gquiz.push(10);
    gquiz.push(30);
    gquiz.push(20);
    gquiz.push(5);
    gquiz.push(1);
 
    cout << "The priority queue gquiz is : ";
    showpq(gquiz);
 
    cout << "\ngquiz.size() : " << gquiz.size();
    cout << "\ngquiz.top() : " << gquiz.top();
 
    cout << "\ngquiz.pop() : ";
    gquiz.pop();
    showpq(gquiz);
 
    return 0;
}
Output
The priority queue gquiz is :     1    5    10    20    30

gquiz.size() : 5
gquiz.top() : 1
gquiz.pop() :     5    10    20    30

Note: The above syntax may be difficult to remember, so in case of numeric values, we can multiply the values with -1 and use max heap to get the effect of min heap.

Methods of Priority Queue are: 

Method

Definition

priority_queue::empty()Returns whether the queue is empty.
priority_queue::size() Returns the size of the queue.
priority_queue::top()Returns a reference to the topmost element of the queue.
priority_queue::push() Adds the element ‘g’ at the end of the queue.
priority_queue::pop()Deletes the first element of the queue.
priority_queue::swap()Used to swap the contents of one priority queue with another priority queue of the same type and size.
priority_queue::emplace()Used to insert a new element into the priority queue container.
priority_queue value_type Represents the type of object stored as an element in a priority_queue. It acts as a synonym for the template parameter.

Must Read: Recent articles on priority queue in STL 

Please write comments if you find anything incorrect, or if you want to share more information about the topic discussed above.  


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!