Pair inside priority queue

This is what priority_queue looks like: template< class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> > class priority_queue; In other words, CompareDist should be the third argument and the second argument should be the container (which has value_type), like the following: priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq; Notice also, that priority_queue is what is called a … Read more

The reason of using `std::greater` for creating min heap via `priority_queue`

The logical argument is as follows std::priority_queue is a container adaptor; basic memory considerations make the back the preferred place for modifications (with pop_back() and push_back()) for sequence containers such as std::vector. the priority_queue primitives are based on std::make_heap (constructor), std::pop_heap + container::pop_back (priority_queue::pop) and on container::push_back + std::push_heap (priority_queue::push) pop_heap will take the front … Read more

PriorityQueue not sorting on add

I guess you expect PriorityQueue to return elements in particular order when you iterate it. However, PriorityQueue doesn’t provide such a behaviour, because it’s implemented as a priority heap rather than sorted list. From javadoc: The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular … Read more

What’s faster: inserting into a priority queue, or sorting retrospectively?

Testing is the best way to answer this question for your specific computer architecture, compiler, and implementation. Beyond that, there are generalizations. First off, priority queues are not necessarily O(n log n). If you have integer data, there are priority queues which work in O(1) time. Beucher and Meyer’s 1992 publication “The morphological approach to … Read more

Efficiency of the STL priority_queue

The priority queue adaptor uses the standard library heap algorithms to build and access the queue – it’s the complexity of those algorithms you should be looking up in the documentation. The top() operation is obviously O(1) but presumably you want to pop() the heap after calling it which (according to Josuttis) is O(2*log(N)) and … Read more

How to update elements within a heap? (priority queue)

Typical Solution The usual solution is to mark an element as invalid and insert a new element, then eliminate the invalid entries as they are popped-off. Alternative Solution If that approach doesn’t suffice, it is possible restore the min-heap invariant in O(log n) steps as long as the location of the value being changed is … Read more