0

my problem is:

  • I have my program with 2 class plus the main;

  • I've declared a priority_queue inside a member function of a class;

  • I have to define the comparison and I think the code I should use is:

    // Determine priority (in the priority queue)
    bool operator < (const node & a, const node & b)
    {
      return a.getPriority() > b.getPriority();
    }
    

Question: where Should I insert this piece of code? Could someone help me?

thanks

4

2 回答 2

1

看起来您operator<可能是对node. 问问自己:节点在逻辑上是否具有可比性?是否清楚比较节点(在priorty_queue 的上下文之外)应该比较它们的优先级?也许它应该比较他们的位置,或者他们可能包含的任何其他内容。如果您提供一个operator<,那么拥有其他 5 个比较运算符也是有意义的。如果不清楚node < node实际比较的是什么,请不要提供operator<for 节点。在这种情况下,最好为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.

于 2013-02-20T14:14:09.723 回答
0

在声明priority_queue 的地方应该可以看到这个操作符。由于优先级队列仅存在于成员中,因此我会将运算符的定义放在.cpp实现该方法的文件中给定方法定义的正上方。

于 2013-02-20T13:57:23.170 回答