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;
我在另一个结构 (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;