Недействительный оператор <при сортировке std:: list
У меня есть ребра графа std:: list, и я хочу сортировать ребра на основе их конечной точки, а затем их нестабильности. Но я получаю исключение из недействительного оператора < во время моей функции сравнения ниже мой код. Мой список содержит указатели на края и
ребра имеют узлы назначения в качестве их члена.
bool compareEdges(const Edge *e1,const Edge *e2){
if(e1->destination->outdegree < e2->destination->outdegree){
return true;
}
else if(e1->destination->outdegree > e2->destination->outdegree){
return false;
}
else if(e1->destination->indegree > e2->destination->indegree){
return false;
}
return true;
}
И вот вызов функции сортировки.
currentNode->edgeList.sort(compareEdges);
Пожалуйста, помогите мне удалить это исключение.
![enter image description here]()
Спасибо
Ответы
Ответ 1
Ваш компаратор возвращает true
, когда оба соответствующих поля равны. Это недопустимо, поэтому вполне возможно, что реализация sort
обнаружила через assert.
Предполагается передать предикат "меньше" на sort
: формально "строгий слабый порядок". Все остальное - поведение undefined. Кажется, в этом случае вам повезло, и реализация обнаруживает, что она попала в невозможную ситуацию из-за несогласованных сравнений.