std::strict_weak_order
std::strict_weak_order (엄밀 약순서 개념)
관계 R이 그 인자들에 대해 엄밀 약순서(strict weak ordering)를 부과하는지를 명세하는 개념(concept)이에요. std::sort 같은 정렬 알고리즘이 요구하는 비교 함수의 성질이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class R, class T, class U >
concept strict_weak_order = std::relation<R, T, U>;
개념 strict_weak_order<R, T, U>는 관계 R이 그 인자들에 엄밀 약순서를 부과함을 명세해요.
의미 요구사항
엄밀 약순서는 다음 성질을 요구해요.
- 비반사적(irreflexive): 모든
x에 대해r(x, x)는 거짓. - 비대칭적(asymmetric):
r(a, b)가 참이면r(b, a)는 거짓. - 추이적(transitive):
r(a, b) && r(b, c)이면r(a, c). - 동치의 추이성(transitivity of equivalence): 서로 비교 불가능한(즉
r(a,b)도r(b,a)도 거짓인) 요소들은 추이적 동치 클래스를 형성해야 해요. 즉a~b(동치)이고b~c이면a~c여야 해요.
< 연산자처럼 "보다 작다"의 관계가 전형적인 엄밀 약순서예요. std::sort, std::set, std::map 같은 표준 라이브러리의 정렬·정렬된 컨테이너가 비교 함수에 요구하는 핵심 성질이에요.
relation과의 구분은 순전히 의미적(semantic)이에요. 정렬 알고리즘이 올바르게 동작하도록 보장하려면 비교 함수가 엄밀 약순서를 만족해야 해요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.7.7 Concept strict_weak_order [concept.strictweakorder]
- C++20 표준 (ISO/IEC 14882:2020): 18.7.7 Concept strict_weak_order [concept.strictweakorder]