Pair inside priority queue

c++, priority-queue, std-pair, stl

Solution

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.

Problem

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.

Original source