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?

Illustration representing computer hardware

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.

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

A computer programmer
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:

  • 125 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.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved