priority_queue声明和bool运算符<宣言

时间:2013-02-20 13:54:56

标签: c++ priority-queue

我的问题是:

  • 我的程序有2级加上主;

  • 我在类的成员函数中声明了priority_queue;

  • 我必须定义比较,我认为我应该使用的代码是:

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

问题:我应该在哪里插入这段代码?有人能帮助我吗?

感谢

2 个答案:

答案 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文件中的给定方法定义的正上方。