C ++) Недопустимые операнды для двоичного выражения Ошибка с приоритетной очередью

У меня есть структура (A) и очередь приоритетов (PQ) в другой структуре (B).

Это структура 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;
}};

Ничего особенного, верно?

и я использую приоритетную очередь объектов Node, как показано ниже:

    std::priority_queue<Node> pq;

Но когда я запускаю проект, я получаю сообщение об ошибке:

Недопустимые операнды в бинарном выражении («const Node» и «const Node»)

Я хочу поставить высший приоритет для общей стоимости объекта Node
Как я могу решить эту проблему?

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

введите описание изображения здесь

0

Решение

Для того, чтобы иметь возможность использовать 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 учебный класс

Вы также можете использовать Compare класс, который дает возможность сравнить два Node объекты:

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

и использовать его для построения std::priority_queue объект.

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

Другие решения

std::priority_queue требует, чтобы тип элемента предоставлял перегруженный operator< (или компаратор через Compare аргумент шаблона):

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

По вопросам рекламы [email protected]