C ++)二进制表达式的无效操作数错误与优先队列

C++ ) Invalid operands to binary expression Error with Priority Queue

我在另一个结构 (B) 中有一个结构 (A) 和优先级队列 (PQ)。

这是下面的结构 A :

struct Node{
int level;
int total;
std::vector<int> sequence;

void clear(){
    sequence.clear();
}

void init(){
    level = 0;
    total = 0;
    sequence.clear();
}

long subjectNumber(){
    return sequence.size();
}

bool isInSequence(int index){
    for(int i = 0; i < sequence.size(); i++){
        if(index == sequence.at(i)){
            return true;
        }
    }
    return false;
}};

没什么特别的吧?

我使用节点对象的优先级队列如下:

    std::priority_queue<Node> pq;

但是当我 运行 这个项目时我得到了一个错误:

Invalid operands to binary expression ('const Node' and 'const Node')

我想把Node对象的总值放在首位 我该如何解决这个问题?

UPDATED:
The picture is what I'm getting, at the project, there is no 'red'Line for me!

std::priority_queue 要求元素类型提供重载的 operator<(或通过 Compare 模板参数提供的比较器):

bool operator<(const Node& lhs, const Node &rhs) {
  // ...
}

为了能够使用 std::priority_queue<Node>,您需要 Node.

的有效小于运算符函数

您可以将 operator< 重载定义为成员函数或非成员函数。

成员函数重载

struct Node{
   int level;
   int total;
   std::vector<int> sequence;

   void clear(){
      sequence.clear();
   }

   bool operator<(Node const& rhs) const { ... }
};

非成员函数重载

struct Node{
   int level;
   int total;
   std::vector<int> sequence;

   void clear(){
      sequence.clear();
   }

};

bool operator<(Node const& lhs, Node const& rhs) { ... }

使用 Compare class

您还可以使用 Compare class 来比较两个 Node 对象:

struct NodeCompare
{
    bool operator()(Node const& lhs, Node const& rhs) { ... }
};

并用它来构造 std::priority_queue 对象。

using MyQueue = std::priority_queue<Node, NodeCompare>;
MyQueue queue;