Namespaces
Variants

C++ named requirements: Compare

From ko.cppreference.net
C++ named requirements

Compare 는 표준 라이브러리 기능 중 일부가 사용자 제공 함수 객체 타입으로부터 기대하는 요구 사항들의 집합입니다.

Compare 를 만족하는 타입의 객체에 함수 호출 연산을 적용한 반환 값은 변환 되어 bool 일 때, 호출의 첫 번째 인수가 이 타입에 의해 유도된 엄격한 약순서 관계 에서 두 번째 인수보다 앞에 나타나면 true 를, 그렇지 않으면 false 를 반환합니다.

모든 BinaryPredicate 과 마찬가지로, 해당 표현식의 평가는 역참조된 반복자를 통해 비-const 함수를 호출해서는 안 되며, 구문적으로 함수 호출 연산은 const 객체 인자를 수용해야 하며, 인자가 const 인지 비- const 인지에 관계없이 동일한 동작을 보여야 합니다.

목차

요구사항

타입 T 가 다음 조건을 만족하면 Compare 를 만족합니다

주어진

  • comp , T 타입의 객체,
  • equiv ( a, b ) , 표현식-동등 관계인 ! comp ( a, b ) && ! comp ( b, a ) .

다음 표현식들은 유효해야 하며 지정된 효과를 가져야 합니다:

표현식 반환 타입 요구 사항
comp ( a, b )

BooleanTestable 요구사항 충족

(C++20 이전)

boolean-testable 개념 모델

(C++20 이후)
다음 속성을 갖는 엄격한 약순서 관계를 설정:
  • 모든 a 에 대해 comp ( a, a ) == false .
  • 만약 comp ( a, b ) == true 이면 comp ( b, a ) == false .
  • 만약 comp ( a, b ) == true 이고 comp ( b, c ) == true 이면 comp ( a, c ) == true .
equiv ( a, b ) bool 다음 속성을 갖는 동치 관계 를 설정:
  • 모든 a 에 대해 equiv ( a, a ) == true .
  • 만약 equiv ( a, b ) == true 이면, equiv ( b, a ) == true .
  • 만약 equiv ( a, b ) == true 이고 equiv ( b, c ) == true 이면, equiv ( a, c ) == true .

참고: comp 는 strict total ordering 을 equiv 에 의해 결정된 동치 클래스들에 유도합니다.

표준 라이브러리

다음 표준 라이브러리 기능은 Compare 유형을 필요로 합니다.

키로 정렬된 고유 키의 컬렉션
(클래스 템플릿)
키로 정렬된 키-값 쌍의 컬렉션, 키는 고유함
(클래스 템플릿)
키로 정렬된 키의 컬렉션
(클래스 템플릿)
키로 정렬된 키-값 쌍의 컬렉션
(클래스 템플릿)
우선순위 큐를 제공하기 위해 컨테이너를 적응시킵니다
(클래스 템플릿)
요소 범위를 정렬합니다
(함수 템플릿 & 알고리즘 함수 객체)
요소들을 정렬합니다
(의 공개 멤버 함수 std::forward_list<T,Allocator>)
요소들을 정렬합니다
(의 공개 멤버 함수 std::list<T,Allocator>)
동등한 요소 간의 상대적 순서를 유지하면서 요소 범위를 정렬합니다
(함수 템플릿 & 알고리즘 함수 객체)
범위의 처음 N개 요소를 정렬합니다
(함수 템플릿 & 알고리즘 함수 객체)
요소 범위를 복사하고 부분적으로 정렬합니다
(함수 템플릿 & 알고리즘 함수 객체)
(C++11)
범위가 정렬되었는지 확인합니다
(함수 템플릿 & 알고리즘 함수 객체)
가장 큰 정렬된 하위 범위를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
범위가 정렬되었다면 N번째 요소를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
이진 탐색을 사용하여 주어진 값보다 작지 않은 첫 번째 요소를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
이진 탐색을 사용하여 주어진 값보다 큰 첫 번째 요소를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
이진 탐색을 사용하여 요소가 범위에 존재하는지 확인합니다
(함수 템플릿 & 알고리즘 함수 객체)
이진 탐색을 사용하여 주어진 값과 일치하는 요소의 범위를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
두 개의 정렬된 범위를 병합합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 개의 정렬된 리스트를 병합합니다
(의 공개 멤버 함수 std::forward_list<T,Allocator>)
두 개의 정렬된 리스트를 병합합니다
(의 공개 멤버 함수 std::list<T,Allocator>)
두 개의 정렬된 범위를 제자리에서 병합합니다
(함수 템플릿 & 알고리즘 함수 객체)
한 시퀀스가 다른 시퀀스의 부분 시퀀스인지 확인합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 집합 간의 차집합을 계산합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 집합의 교집합을 계산합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 집합 간의 대칭 차집합을 계산합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 집합의 합집합을 계산합니다
(함수 템플릿 & 알고리즘 함수 객체)
최대 힙에 요소를 추가합니다
(함수 템플릿 & 알고리즘 함수 객체)
최대 힙에서 가장 큰 요소를 제거합니다
(함수 템플릿 & 알고리즘 함수 객체)
요소 범위로 최대 힙을 만듭니다
(함수 템플릿 & 알고리즘 함수 객체)
최대 힙을 오름차순으로 정렬된 요소 범위로 변환합니다
(함수 템플릿 & 알고리즘 함수 객체)
(C++11)
주어진 범위가 최대 힙인지 확인합니다
(함수 템플릿 & 알고리즘 함수 객체)
최대 힙인 가장 큰 하위 범위를 찾습니다
(함수 템플릿 & 알고리즘 함수 객체)
주어진 값 중 더 큰 값을 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
범위에서 가장 큰 요소를 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
주어진 값 중 더 작은 값을 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
범위에서 가장 작은 요소를 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
(C++11)
두 요소 중 더 작은 값과 더 큰 값을 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
범위에서 가장 작은 요소와 가장 큰 요소를 반환합니다
(함수 템플릿 & 알고리즘 함수 객체)
두 범위를 사전식으로 비교합니다
(함수 템플릿 & 알고리즘 함수 객체)
요소 범위의 다음으로 큰 사전식 순열을 생성합니다
(함수 템플릿 & 알고리즘 함수 객체)
요소 범위의 다음으로 작은 사전식 순열을 생성합니다
(함수 템플릿 & 알고리즘 함수 객체)

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2114
( P2167R3 )
C++98 반환 타입의 문맥적 변환 가능성이 bool 으로
구현체들의 실제 관행을 반영하지 않음
요구사항 수정됨
LWG 3031 C++98 const 값에 대한 요구사항이 불충분함 요구사항 강화됨

참고 항목

relation 이 엄격한 약순서(strict weak ordering)를 부과함을 명시
(concept)
비교 연산자 < , <= , > , >= , == , != , 및 <=> (C++20) , 인수들을 비교