std::strict_weak_order (since C++20)
From cppreference.com
Defined in header <concepts>
|
||
template< class R, class T, class U > concept strict_weak_order = std::relation<R, T, U>; |
(since C++20) | |
The concept strict_weak_order<R, T, U>
specifies that the relation
R
imposes a strict weak ordering on its arguments.
Semantic requirements
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 strict_weak_order
is purely semantic.
References
- C++23 standard (ISO/IEC 14882:2024):
- 18.7.7 Concept
strict_weak_order
[concept.strictweakorder]
- 18.7.7 Concept
- C++20 standard (ISO/IEC 14882:2020):
- 18.7.7 Concept
strict_weak_order
[concept.strictweakorder]
- 18.7.7 Concept