Why does STL work with a comparison function that is strict weak ordering? Why can\'t it be partial ordering?
Simply, a strict weak ordering is defined as an ordering that defines a (computable) equivalence relation. The equivalence classes are ordered by the strict weak ordering: a strict weak ordering is a strict ordering on equivalence classes.
A partial ordering (that is not a strict weak ordering) does not define an equivalence relation, so any specification using the concept of "equivalent elements" is meaningless with a partial ordering that is not a strict weak ordering. All STL associative containers use this concept at some point, so all these specifications are meaningless with a partial ordering that is not a strict weak ordering.
Because a partial ordering (that is not a strict weak ordering) does not necessarily define any strict ordering, you cannot "sort elements" in the common sense according to partial ordering (all you can do is a "topological sort" which has weaker properties).
Given
S
<
over S
x
in S
you can define a partition of S
(every element of S
is either in L(x)
, I(x)
or G(x)
):
L(x) = { y in S | y
A sequence is sorted according to <
iff for every x
in the sequence, elements of L(x)
appear first in the sequence, followed by elements of I(x)
, followed by elements of G(x)
.
A sequence is topologically sorted iff for every element y
that appears after another element x
in the sequence, y
is not less than x
. It is a weaker constraint than being sorted.
It is trivial to prove that every element of L(x)
is less than any element of G(x)
. There is no general relation between elements of L(x)
and elements of I(x)
, or between elements of I(x)
and elements of G(x)
. However, if <
is a strict weak ordering, than every element of L(x)
is less than any element of I(x)
, and than any element of I(x)
is less than any element of G(x)
.
If <
is a strict weak ordering, and x
L(x) U I(x)
is less then any element I(y) U G(y)
: any element not greater than x
is less than any element not less that y
. This does not necessarily hold for a partial ordering.