У меня есть структура (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!
Для того, чтобы иметь возможность использовать 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;
std::priority_queue
требует, чтобы тип элемента предоставлял перегруженный operator<
(или компаратор через Compare
аргумент шаблона):
bool operator<(const Node& lhs, const Node &rhs) {
// ...
}