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.
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;
你需要为内置的priority_queue模板提供第二个参数。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.