Efficient way to initialize a priority queue
Last Updated :
22 Jun, 2022
STL Priority Queue is the implementation of Heap Data Structure. By default, it's a max heap, and can be easily for primitive data types. There are some important applications of it which can be found in this article.
Priority queue can be initialized in two ways either by pushing all elements one by one or by initializing using their constructor. In this article, we will discuss both methods and examine their time complexities.
Method 1: The simplest approach is to traverse the given array and push each element one by one in the priority queue. In this method, the push method in the priority queue takes O(log N) time. Where N is the number of elements in the array.
Below is the implementation of the above approach:
C++
// C++ program to initialize the
// priority queue
#include <bits/stdc++.h>
using namespace std;
// Driver Code
int main()
{
int arr[] = { 15, 25, 6, 54, 45, 26, 12 };
int N = sizeof(arr) / sizeof(arr[0]);
// Initialize priority_queue
priority_queue<int> pq;
// Traverse the array arr[]
for (int i = 0; i < N; i++) {
// Push the element arr[i]
pq.push(arr[i]);
}
cout << "The elements in priority"
<< " Queue are: ";
// Traverse until pq is non-empty
while (!pq.empty()) {
// Print the element in pq
cout << pq.top() << " ";
// Pop the top element
pq.pop();
}
return 0;
}
Java
// Java program to initialize the
// priority queue
import java.util.*;
public class GFG
{
public static void main(String[] args)
{
int[] arr = { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.length;
// Initialize priority_queue
Vector<Integer> pq = new Vector<Integer>();
// Traverse the array arr[]
for (int i = 0; i < N; i++)
{
// Push the element arr[i]
pq.add(arr[i]);
}
Collections.sort(pq);
Collections.reverse(pq);
System.out.print("The elements in priority" + " Queue are: ");
// Traverse until pq is non-empty
while (pq.size() > 0)
{
// Print the element in pq
System.out.print(pq.get(0) + " ");
// Pop the top element
pq.remove(0);
}
}
}
// This code is contributed by divyesh072019.
Python3
# Python3 program to initialize the
# priority queue
# Driver Code
if __name__ == '__main__':
arr = [15, 25, 6, 54, 45, 26, 12]
N = len(arr)
# Initialize priority_queue
pq = []
# Traverse the array arr[]
for i in range(N):
# Push the element arr[i]
pq.append(arr[i])
print("The elements in priority Queue are: ", end = "")
pq = sorted(pq)
# Traverse until pq is non-empty
while (len(pq) > 0):
# Print the element in pq
print(pq[-1], end = " ")
# Pop the top element
del pq[-1]
# This code is contributed by mohit kumar 29.
C#
// C# program to initialize the
// priority queue
using System;
using System.Collections.Generic;
class GfG
{
public static void Main()
{
int[] arr = { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.Length;
// Initialize priority_queue
List<int> pq = new List<int>();
// Traverse the array arr[]
for (int i = 0; i < N; i++) {
// Push the element arr[i]
pq.Add(arr[i]);
}
pq.Sort();
pq.Reverse();
Console.Write("The elements in priority" + " Queue are: ");
// Traverse until pq is non-empty
while (pq.Count > 0) {
// Print the element in pq
Console.Write(pq[0] + " ");
// Pop the top element
pq.RemoveAt(0);
}
}
}
// This code is contributed by divyeshrabadiya07.
JavaScript
<script>
// Javascript program to initialize the priority queue
let arr = [ 15, 25, 6, 54, 45, 26, 12 ];
let N = arr.length;
// Initialize priority_queue
let pq = [];
// Traverse the array arr[]
for (let i = 0; i < N; i++) {
// Push the element arr[i]
pq.push(arr[i]);
}
pq.sort(function(a, b){return a - b});
pq.reverse();
document.write("The elements in priority" + " Queue are: ");
// Traverse until pq is non-empty
while (pq.length > 0) {
// Print the element in pq
document.write(pq[0] + " ");
// Pop the top element
pq.shift();
}
// This code is contributed by suresh07.
</script>
Output: The elements in priority Queue are: 54 45 26 25 15 12 6
Time Complexity: O(N*log N), where N is the total number of elements in the array.
Auxiliary Space: O(N)
Method 2: In this method, copy all the array elements into the priority queue while initializing it (this copying will be happened using the copy constructor of priority_queue). In this method, the priority_queue will use the build heap method internally. So the build heap method is taking O(N) time.
Syntax:
priority_queue<int> pq(address of the first element, address of the next of the last element);
Syntax for the array:
priority_queue<int> pq (arr, arr + N)
where arr is the array and N is the size of the array.
Syntax for the vector:
priority_queue<int> pq(v.begin(), v.end());
where v is the vector.
Below is the implementation of the above approach:
C++
// C++ program to initialize the
// priority queue
#include <iostream>
#include <queue>
using namespace std;
// Driver Code
int main()
{
int arr[] = { 15, 25, 6, 54, 45, 26, 12 };
int N = sizeof(arr) / sizeof(arr[0]);
// By this type of initialization
// the priority_queue is using
// build heap to make the max heap
cout << "The elements in priority"
<< " Queue are: ";
// Initialize priority_queue
priority_queue<int> pq(arr, arr + N);
// Iterate until pq is non empty
while (!pq.empty()) {
// Print the element
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG {
public static void main(String[] args)
{
Integer[] arr = { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.length;
// By this type of initialization
// the priority_queue is using
// build heap to make the max heap
System.out.println("The elements in priority"
+ " Queue are: ");
// Initialize priority_queue
ArrayList<Integer> l = new ArrayList<Integer>();
Collections.addAll(l, arr);
Collections.sort(l);
// Iterate until pq is non empty
while (l.size() != 0) {
// Print the element
System.out.print(l.get(l.size() - 1) + " ");
l.remove(l.size() - 1);
}
}
}
// This code is contributed by phasing17
Python3
# Python3 program to initialize the
# priority queue
# Driver Code
if __name__=='__main__':
arr = [ 15, 25, 6, 54, 45, 26, 12 ]
N = len(arr)
# By this type of initialization
# the priority_queue is using
# build heap to make the max heap
print("The elements in priority Queue are: ", end = '')
# Initialize priority_queue
pq = arr
pq.sort()
# Iterate until pq is non empty
while (len(pq) != 0):
# Print the element
print(pq[-1], end = ' ')
pq.pop()
# This code is contributed by rutvik_56.
C#
// C# program for the above approach
using System;
using System.Collections;
using System.Collections.Generic;
class GFG{
// Driver Code
public static void Main(string[] args)
{
int []arr= { 15, 25, 6, 54, 45, 26, 12 };
int N = arr.Length;
// By this type of initialization
// the priority_queue is using
// build heap to make the max heap
Console.Write("The elements in priority"
+ " Queue are: ");
// Initialize priority_queue
List<int> l = new List<int>(arr);
l.Sort();
// Iterate until pq is non empty
while (l.Count!=0) {
// Print the element
Console.Write(l[l.Count-1]+ " ");
l.RemoveAt(l.Count-1);
}
}
}
// This code is contributed by noob2000.
JavaScript
<script>
// JAvaScript program to initialize the
// priority queue
let arr = [ 15, 25, 6, 54, 45, 26, 12 ];
let N = arr.length;
// By this type of initialization
// the priority_queue is using
// build heap to make the max heap
document.write("The elements in priority Queue are: ")
// Initialize priority_queue
let pq = arr;
pq.sort(function(a, b){return a - b;});
// Iterate until pq is non empty
while(pq.length != 0)
// Print the element
document.write(pq.pop()+" ");
// This code is contributed by unknown2108
</script>
Output: The elements in priority Queue are: 54 45 26 25 15 12 6
Time Complexity: O(N), where N is the total number of elements in the array.
Auxiliary Space: O(N)
Similar Reads
priority_queue::swap() in C++ STL
Priority queues are a type of container adaptors, specifically designed such that the first element of the queue is either the greatest or the smallest of all elements in the queue. However, in C++ STL (by default) the largest element is at the top. We can also create a priority queue having the sma
3 min read
priority_queue emplace() in C++ STL
Priority queues are a type of container adaptors, specifically designed such that the first element of the queue is either the greatest or the smallest of all elements in the queue. However, in C++ STL (by default) the largest element is at the top. We can also create a priority queue having the sma
4 min read
Priority Queue in C++ STL
In C++, priority queue is a type of queue in which there is some priority assigned to the elements. According to this priority, elements are removed from the queue. By default, the value of the element being inserted is considered as priority. Higher its value, higher its priority. But this can be c
6 min read
Multiple comparisons in a C++ priority queue?
What is a Priority Queue? A Priority Queue is an abstract data type that is similar to a queue, and every element has some priority value associated with it. The priority of the elements in a priority queue determines the order in which elements are served (i.e., the order in which they are removed)
5 min read
priority_queue::top() in C++ STL
Priority queues are a type of container adaptors, specifically designed such that the first element of the queue is either the greatest or the smallest of all elements in the queue. In general, elements are arranged according to some priority. However in C++ STL, the top element is the greatest elem
3 min read
Most efficient way to implement Stack and Queue together
Introduction to Stack:A stack is a linear data structure in computer science that follows the Last-In-First-Out (LIFO) principle. It is a data structure in which the insertion and removal of elements can only be performed at one end, which is called the top of the stack.In a stack, elements are push
15+ min read
What is Priority Queue | Introduction to Priority Queue
A priority queue is a type of queue that arranges elements based on their priority values. Each element has a priority associated. When we add an item, it is inserted in a position based on its priority.Elements with higher priority are typically retrieved or removed before elements with lower prior
6 min read
Turn a Queue into a Priority Queue
What is Queue?Queue is an abstract data type that is open at both ends. One end is always used to insert data (enqueue) which is basically the rear/back/tail end and the other which is the front end is used to remove data (dequeue). Queue follows First-In-First-Out (FIFO) methodology, i.e., "the dat
9 min read
priority_queue value_type in C++ STL
The priority_queue :: value_type method is a built-in function in C++ STL which represents the type of object stored as an element in a priority_queue. It acts as a synonym for the template parameter. Time complexity: O(1)Syntax: priority_queue::value_type variable_name It has no parameters and no r
2 min read
Priority Queue of Sets in C++ with Examples
Priority Queues 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}). Functi
4 min read