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}). This context is similar to a heap, where elements can be inserted at any moment, and only the max heap element can be retrieved (the one at the top in the priority queue). Elements can be inserted at any order and it have O(log(n))
time complexity for insertion.
Syntax:
priority_queue<int> pq;
Methods for priority queue:
- empty – Test whether container is empty (public member function )
- size – Return size (public member function )
- top – Access top element (public member function )
- push – Insert element (public member function )
- emplace – Construct and insert element (public member function )
- pop – Remove top element (public member function )
- swap – Swap contents (public member function )
// CPP Program to demonstrate Priority Queue
#include <iostream>
#include <queue>
using namespace std;
void showpq(priority_queue<int> tcp_queue)
{
priority_queue<int> tcp = tcp_queue;
while (!tcp.empty()) {
cout << '\t' << tcp.top();
tcp.pop();
}
cout << '\n';
}
int main()
{
priority_queue<int> TCPQueue;
TCPQueue.push(10);
TCPQueue.push(30);
TCPQueue.push(20);
TCPQueue.push(5);
TCPQueue.push(1);
cout << "The priority queue TCPQueue is : ";
showpq(TCPQueue);
cout << "\nTCPQueue.size() : " << TCPQueue.size();
cout << "\nTCPQueue.top() : " << TCPQueue.top();
cout << "\nTCPQueue.pop() : ";
TCPQueue.pop();
showpq(TCPQueue);
return 0;
}
/*
The priority queue gquiz is : 30 20 10 5 1
gquiz.size() : 5
gquiz.top() : 30
gquiz.pop() : 20 10 5 1
*/
create a min-heap for the priority queue
Syntax :
priority_queue <int, vector<int>, greater<int>> tcp = tcp_queue;
// 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> > tcp_queue)
{
priority_queue<int, vector<int>, greater<int> > tcp = tcp_queue;
while (!tcp.empty()) {
cout << '\t' << tcp.top();
tcp.pop();
}
cout << '\n';
}
// Driver Code
int main()
{
priority_queue<int, vector<int>, greater<int> > TCPQueue;
TCPQueue.push(10);
TCPQueue.push(30);
TCPQueue.push(20);
TCPQueue.push(5);
TCPQueue.push(1);
cout << "The priority queue TCPQueue is : ";
showpq(TCPQueue);
cout << "\nTCPQueue.size() : " << TCPQueue.size();
cout << "\nTCPQueue.top() : " << TCPQueue.top();
cout << "\nTCPQueue.pop() : ";
TCPQueue.pop();
showpq(TCPQueue);
return 0;
}
/*
The priority queue gquiz is : 1 5 10 20 30
gquiz.size() : 5
gquiz.top() : 1
gquiz.pop() : 5 10 20 30
*/