Ответ 1
Если min
и max
используются только для упорядоченных множеств, все разумные определения эквивалентны.
Однако на практике min
и max
используются на предварительно упорядоченных наборах: наборы, в которых у вас могут быть два элемента, которые сортируют одинаковые, не будучи идентичными. Например, вы можете манипулировать:
struct student {
char *name;
int grade;
};
и определите s1 < s2
, когда strcmp(s1->name, s2->name) < 0
. Тогда два ученика с тем же именем, но с разными классами будут сортироваться одинаково. Такие два элемента называются эквивалентными для отношения (pre) порядка.
В предварительно упорядоченном наборе аргумент min
двух эквивалентных элементов должен возвращать первый параметр, а max
должен возвращать второй. Это определение сохраняет несколько свойств, которые вы ожидаете, особенно
- пара (
min(x,y)
,max(x,y)
) либо (x
,y
), либо (y
,x
),
и
- если
x
иy
различны, тоmin(x,y)
иmax(x,y)
различны,
и
- функция, которая отображает (
x
,y
) в (min(x,y)
,max(x,y)
), является стабильной функцией сортировки для множеств из двух элементов.
Это не новая идея, и вы найдете способы лучше объяснений, чем мои, в ряде стандартных текстов по программированию. Глава 7 из Степановских статей, уже цитированная Mat и juanchopanza, является хорошим источником, если вам нравится синтаксис С++.