这是我的比较器类:
template <class T>
class EdgeComparator{
public:
bool operator()(std::pair<Edge<T>, int>& lhs, std::pair<Edge<T>, int>& rhs) const{
return lhs.second <= rhs.second;
}
};
这是我的优先级队列init:
//Initialize the priority queue
std::priority_queue<
std::pair<Edge<T>,int>,
std::vector<std::pair<Edge<T>,int>,
EdgeComparator<T>>
> pQueue;
这是错误发生的地方 - 在关于预编译器的奇怪错误消息流之后:
std::pair<Edge<T>, int> topEdge = pQueue.top();
./Prim.cpp:60:54: error: ‘class std::priority_queue<std::pair<Edge<int>, int>, std::vector<std::pair<Edge<int>, int>, EdgeComparator<int> >, std::less<std::pair<Edge<int>, int> > >’ has no member named ‘top’
std::pair<Edge<T>, int> topEdge = pQueue.top();
ATTEMPT 1(为比较器参数添加了const):
template <class T>
class EdgeComparator{
public:
bool operator()(const std::pair<Edge<T>, int>& lhs, const std::pair<Edge<T>, int>& rhs) const{
return lhs.second <= rhs.second;
}
};
答案 0 :(得分:0)
我想我在这里发现了一个微妙的错误:
std::priority_queue<
std::pair<Edge<T>, int>,
std::vector<std::pair<Edge<T>, int>,
^^
EdgeComparator<T> > > pQueue;
^^^
看起来应该这样:
std::priority_queue<
std::pair<Edge<T>, int>,
std::vector<std::pair<Edge<T>, int> >,
^^^^
EdgeComparator<T> > pQueue;
^^^
第一个声明并不适合我。此外,错误消息支持我的建议。仔细看看:
./Prim.cpp:60:54: error: ‘class std::priority_queue<std::pair<Edge<int>, int>,
std::vector<std::pair<Edge<int>, int>, EdgeComparator<int> >,
std::less<std::pair<Edge<int>, int> > >’ has no member named ‘top’
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
它使用标准比较器std::less<>
而不是您自己的班级EdgeComparator<>
。因此,我得出结论,你的声明中缺少比较器模板参数,这是因为它由于缺少角度支撑而位于错误的位置。