# std::StrictWeakOrder

From cppreference.com
< cpp‎ | concepts

Defined in header `<concepts>` |  |
template < class R, class T, class U > concept StrictWeakOrder = std::Relation<R, T, U>; | (1) | (since C++20)

The concept `StrictWeakOrder<R, T, U>` specifies that the `Relation` `R` imposes a strict weak ordering on its arguments. A relation `r` is a strict weak ordering if

- it is irreflexive: for all `x`, `r(x, x)` is false;
- it is transitive: for all `a`, `b` and `c`, if `r(a, b)` and `r(b, c)` are both true then `r(a, c)` is true;
- let `e(a, b)` be `!r(a, b) && !r(b, a)`, then `e` is transitive: `e(a, b) && e(b, c)` implies `e(a, c)`.

Under these conditions, it can be shown that `e` is an equivalence relation, and `r` induces a strict total ordering on the equivalence classes determined by `e`.

### Notes

The distinction between `Relation` and `StrictWeakOrder` is purely semantic.

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/concepts/StrictWeakOrder&oldid=104903"