Недействительный оператор <при сортировке 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. Кажется, в этом случае вам повезло, и реализация обнаруживает, что она попала в невозможную ситуацию из-за несогласованных сравнений.