我的问题是:
我的程序有2级加上主;
我在类的成员函数中声明了priority_queue;
我必须定义比较,我认为我应该使用的代码是:
// Determine priority (in the priority queue)
bool operator < (const node & a, const node & b)
{
return a.getPriority() > b.getPriority();
}
问题:我应该在哪里插入这段代码?有人能帮助我吗?
感谢
答案 0 :(得分:1)
您的operator<
似乎可能是node
的一个不好的补充。问问自己:节点在逻辑上是否可比?是否清楚比较节点(在priorty_queue的上下文之外)应该比较它们的优先级?也许应该比较他们的位置,或者他们可能包含的任何其他东西。如果你提供operator<
,那么拥有其他5个比较运算符也是有意义的。如果不清楚node < node
实际比较的是什么,请不要为节点提供operator<
。在这种情况下,最好为priority_queue
...
struct NodeComparer
{
bool operator()(const node& left, const node& right)
{
return left.GetPriority() > right.GetPriority();
}
}
...
std::priority_queue<node, std::vector<node>, NodeComparer> nodeQueue;
这样您的priority_queue
可以按预期工作,但不会向node
添加不合逻辑的功能。
答案 1 :(得分:0)
在声明priority_queue的地方应该可以看到此运算符。由于优先级队列仅存在于成员中,因此我将操作符的定义放在实现该方法的.cpp
文件中的给定方法定义的正上方。