Open-Source Internship opportunity by OpenGenus for programmers. Apply now.
Reading time: 15 minutes
The priority queue in the STL of C++ is a dynamically resizing container to implement the special case of priority queye under the queue data structure. It is a sequential linear container. The top element of the priority queue is the greatest with all elements arranged in non-increasing order.
Definition in <queue>
std::priority_queue is defined as follows under <queue>
header file:
template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;
Declaration
A priority queue with name a storing integers is declared as follows:
priority_queue<int> a;
Functions
Assume the priority queue a to be:
and the priority queue b to be:
The following functions are defined under the <queue>
header file:
- a.empty(): Returns true if the priority queue is empty, false otherwise.
- a.size(): Returns an integer indicating the size of the priority queue a.
- a.swap(b): Swaps the contents of priority queue a with priority queue b.
- a.emplace(x): Places the element x at the top of the priority queue a and then the queue is rearranged.
- a.top(): Returns a reference to the top element of the priority queue a.
- a.push(x): Inserts the element x at the top of the priority queue a and then the queue is rearranged.
- a.pop(): Removes the element x at the top of the priority queue a.
For the above priority queue a, the function returns false.
For the above priority queue a, the function returns the integer 3.
For the above example, if the function is called, priority queue a becomes:
And priority queue b becomes:
For the queue a, if the function a.emplace(45) is called, a becomes:
For the above queue a, the function returns the integer 50.
For the queue a, if the function a.push(45) is called, a becomes:
For the queue a, if the function a.pop() is called, a becomes:
Note
- The worst case time complexity of inserting an element using emplace/push is `O(NlogN)` as the elements are reordered according to priority after insertion.
- Removing an element using pop operation is an `O(1)` operation as the element at the top is immediately removed.
Illustration of Queue
// C++ code to illustrate priority queue in Standard Template Library (STL)
#include <iostream>
#include <queue>
using namespace std;
void display(priority_queue <int> a)
{
priority_queue <int> c = a;
while (!c.empty())
{
cout << '\t' << c.top();
c.pop();
}
cout << '\n';
}
int main ()
{
priority_queue <int> a;
a.push(10);
a.push(30);
a.push(20);
a.push(5);
a.push(1);
cout << "The priority queue a is : ";
display(a);
cout << "a.size() : \n" << a.size();
cout << "a.top() : \n" << a.top();
cout << "a.pop() : \n";
a.pop();
display(a);
return 0;
}
\\Console output
The priority queue a is : 30 20 10 5 1
a.size() : 5
a.top() : 30
a.pop() : 20 10 5 1