std::relation
std::relation (관계 개념)
R이 T, U 타입의 인자들로 호출 가능한 이항 관계인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class R, class T, class U >
concept relation =
std::predicate<R, T, T> &&
std::predicate<R, T, U> &&
std::predicate<R, U, T> &&
std::predicate<R, U, U>;
개념 relation<R, T, U>는 R이 T와 U의 혼합된 인자 조합들로 호출 가능하고 그 결과가 bool로 판정 가능한 이항 술어임을 명세해요. (T,T), (T,U), (U,T), (U,U) 네 가지 조합 모두에 대해 R이 predicate여야 해요.
즉 R은 두 인자 사이의 관계(예: 비교 연산)를 나타내는 함수 객체예요. 대칭적으로 어느 순서로든 호출할 수 있어야 해요.
relation을 기반으로 equivalence_relation(동치 관계), strict_weak_order(엄밀 약순서) 같은 더 의미 있는 관계 개념들이 확장돼요. std::sort의 비교 함수 등 정렬·탐색 알고리즘의 이항 조건자를 제약할 때 쓰여요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.7.5 Concept relation [concept.relation]
- C++20 표준 (ISO/IEC 14882:2020): 18.7.5 Concept relation [concept.relation]