I am trying to store pairs in priority queue and I am using a compare function that compares second value of each pair.
#include<iostream> #include<queue> #include<utility> using namespace std; class CompareDist { public: bool operator()(pair<int,int> n1,pair<int,int> n2) { return n1.second>n2.second; } }; int main() { priority_queue<pair<int,int>,CompareDist> pq; }
When I compile this I get an error
error: no type named ‘value_type’ in ‘class CompareDist’
What could be the reason.I am new to STL.
Priority Queue ordered by first element In C++ if the element is in the form of pairs, then by default the priority of the elements is dependent upon the first element. Therefore, we just have to use the priority queue of pairs only.
Priority queue is an abstract data type for storing a collection of prioritized elements that supports insertion and deletion of an element based upon their priorities, that is, the element with first priority can be removed at any time.
In a priority queue, an element with high priority is served before an element with low priority. In some implementations, if two elements have the same priority, they are served according to the order in which they were enqueued; in other implementations ordering of elements with the same priority remains undefined.
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 "container adaptor". Another container is used as the underlying container and the priority_queue has special members functions for accessing it. Another example of a container adaptor would be std::stack.
priority_queue<pair<int,int>,vector<pair<int,int>>,CompareDist> pq;
you need to provide second argument for the inbuilt template of priority_queue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With