Правильный ответ, как указывали другие, состоит в том, чтобы узнать, что такое "строгий слабый порядок".В частности, если comp(x,y)
является истинным, то comp(y,x)
должно быть ложным.(Обратите внимание, что это означает, что comp(x,x)
неверно.)
Это все, что вам нужно знать, чтобы исправить вашу проблему.Алгоритм sort
не дает никаких обещаний, если ваша функция сравнения нарушает правила.
Если вам интересно, что на самом деле пошло не так, подпрограмма sort
вашей библиотеки, вероятно, использует внутреннюю сортировку.Быстрая сортировка работает путем многократного нахождения пары «не по порядку» элементов в последовательности и их замены.Если ваше сравнение говорит алгоритму, что a, b «не в порядке», а также алгоритму, что b, a «не в порядке», то алгоритм может переставлять их взад-вперед снова и снова навсегда.