Priority Queues using std::priority_queue

# Removing a Specific Element from Priority Queue

## Is it possible to remove a specific element from a priority queue without popping the top element?

The standard std::priority_queue in C++ does not provide a direct way to remove a specific element from the queue without popping the top element. The priority queue is designed to maintain the heap property and only allows access to the topÂ element.

However, if you need to remove a specific element from a priority queue, you can achieve this by creating a new priority queue and selectively pushing elements from the original queue to the new one, skipping the element you want toÂ remove.

Here's an example of how you can remove a specific element from a priorityÂ queue:

#include <iostream>
#include <queue>

int main() {
std::priority_queue<int> pq;

pq.push(10);
pq.push(30);
pq.push(20);
pq.push(40);

int elementToRemove = 20;

std::priority_queue<int> newPq;

while (!pq.empty()) {
if (pq.top() != elementToRemove) {
newPq.push(pq.top());
}
pq.pop();
}

// The original priority queue is now empty
pq = std::move(newPq);

while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
}

In this example, we want to remove the element with value 20 from the priority queue. We create a new priority queue newPq and iterate over the original priority queue pq. For each element in pq, we check if it is not equal to the elementToRemove. If it's not, we push the element into newPq. Finally, we assign the newPq back to pq using std::move() to avoidÂ copying.

The output of this code willÂ be:

40 30 10

As you can see, the element 20 has been removed from the priorityÂ queue.

Keep in mind that this approach has a time complexity of O(n log n), where n is the number of elements in the priority queue, as we need to rebuild the heap for the new priority queue. If you need to perform frequent removals of specific elements, you might consider using a different data structure or implementing a custom priority queue that supports this operation moreÂ efficiently.

This Question is from the Lesson:

### Priority Queues using std::priority_queue

Learn how to access objects based on their importance, and how to customise how that priority is determined

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

### Priority Queues using std::priority_queue

Learn how to access objects based on their importance, and how to customise how that priority is determined

Part of the course:

## Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

### This course includes:

• 124 Lessons
• 550+ Code Samples
• 96% Positive Reviews
• Regularly Updated
• Help and FAQ
Free, Unlimited Access

### Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.