У меня есть набор, и для этого набора мне нужны два разных компаратора.Например, для набора frontier
мне нужно отсортировать по стоимости, но у меня есть другой набор board
, который нужно отсортировать по координатам.Я знаю, что может определить компаратор для каждого набора, используя компаратор в качестве второго аргумента, но я попробовал это, и он выдал ошибку.
Код, который я пытался использовать:
struct tile {
int id;
int xCord;
int yCord;
int cost;
...
bool operator<(const tile& Rhs) const {
if (cost < Rhs.cost) {
return true;
}
else if (cost < Rhs.cost) {
return false;
}
else {
if (id < Rhs.id) {
return true;
}
else
return false;
}
}
...
};
Другая структура, которую я использую для компаратора (я знаю, что это, скорее всего, неверно, поэтому я прошу помощи.):
struct costComp {
int id;
int xCord;
int yCord;
int cost;
costComp() {}
costComp(int a, int b, int c, int d = 0) :
id(a),
xCord(b),
yCord(c),
cost(d) {}
bool operator<( const tile& Rhs) const {
if (xCord < Rhs.xCord)
return true;
else if (xCord < Rhs.xCord)
return false;
else {
if (yCord < Rhs.yCord)
return true;
else if (yCord < Rhs.yCord)
return false;
else
return false;
}
}
};
ЗатемЯ определяю набор как:
set<tile,costComp> startBoard;
Ошибка, которую я получил:
c2064: term does not evaluate to a function taking 2 arguments
Любая помощь очень ценится.