Из-за нерефлексивности и транзитивности оператор< всегда удовлетворяет
определение частичного упорядочения. Определение строгого слабого
порядок является более строгим, и определение общего порядка
еще строже.
И я также прочитал определение строгого слабого порядка в документе: StrictWeakOrdering
Первые три аксиомы, нерефлексивность, антисимметрия и транзитивность,
являются определением частичного упорядочения; транзитивность эквивалентности
требуется по определению строгого слабого порядка. Всего
порядок, который удовлетворяет еще более строгому условию: эквивалентность
должно быть таким же, как равенство.
Я не совсем уверен в этом определении. Некоторые основные вопросы:
1.Is частичный заказ неявно определить эквивалентность?
2. Как насчет строгий слабый порядок а также общий заказ?
3.STL требует строгого слабого упорядочения в алгоритмах сортировки, почему не частичное или полное упорядочение?
Для этого вопроса я прочитал некоторые учебники, которые доказывают, что правила сравнения действительны, доказывая, что правило удовлетворяет трем аксиомам: нерефлексивность, антисимметрия, транзитивность, которая является определением для частичного упорядочения, и документ ссылается на этот оператор< всегда удовлетворяет этому определению, так почему же мы не можем просто сравнивать объекты, используя частичное упорядочение, или эквивалентно, используя оператор
Частичное упорядочение, по сути, <=
, Если оба a <= b
а также b <= a
тогда вы можете сказать, что a
эквивалентно b
, Но также возможно, что ни a <= b
ни b <= a
— эти два элемента несопоставимы. В результате вы не можете навязать общий заказ (например, std::sort
потребуется) на множестве с частичным отношением порядка — в лучшем случае вы можете сделать топологическую сортировку. Вы также не можете вывести отношение эквивалентности — опять же, могут быть элементы, которые несопоставимы.
Строгий слабый порядок как <
, Это не позволяет иметь оба a < b
а также b < a
и если нет a < b
ни b < a
Вы можете просто произнести a
а также b
эквивалент.
Полное упорядочение — это просто строгое слабое упорядочение, когда два элемента эквивалентны тогда и только тогда, когда они равны (что имеет смысл только в том случае, если у вас есть предикат сравнения равенства в дополнение к предикату less-than, и нет стандартного алгоритма библиотеки C ++, который использует оба в то же время, поэтому проблема в значительной степени спорная в этом контексте).
Других решений пока нет …