Namespaces
Variants

C++ named requirements: Compare

From 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> 의 public member function)
요소들을 정렬합니다
( std::list<T,Allocator> 의 public 멤버 함수)
동일한 요소들 간의 순서를 유지하며 범위의 요소들을 정렬합니다
(함수 템플릿)
범위의 첫 N개 요소를 정렬합니다
(function template)
요소 범위를 복사하고 부분적으로 정렬합니다
(function template)
(C++11)
범위가 오름차순으로 정렬되었는지 확인합니다
(함수 템플릿)
가장 큰 정렬된 부분 범위를 찾습니다
(함수 템플릿)
주어진 범위를 부분 정렬하여 지정된 요소로 분할되도록 보장합니다
(function template)
주어진 값보다 작지 않은 첫 번째 요소에 대한 반복자를 반환합니다
(함수 템플릿)
특정 값보다 첫 번째 요소에 대한 반복자를 반환합니다
(함수 템플릿)
부분적으로 정렬된 범위에서 요소가 존재하는지 확인합니다
(함수 템플릿)
특정 키와 일치하는 요소들의 범위를 반환합니다
(함수 템플릿)
두 개의 정렬된 범위를 병합합니다
(함수 템플릿)
두 개의 정렬된 리스트를 병합합니다
( std::forward_list<T,Allocator> 의 public 멤버 함수)
두 개의 정렬된 리스트를 병합합니다
( std::list<T,Allocator> 의 public 멤버 함수)
두 개의 정렬된 범위를 제자리에서 병합합니다
(함수 템플릿)
한 시퀀스가 다른 시퀀스의 부분 시퀀스인 경우 true 를 반환합니다
(함수 템플릿)
두 집합의 차집합을 계산합니다
(함수 템플릿)
두 집합의 교집합을 계산합니다
(함수 템플릿)
두 집합의 대칭차를 계산합니다
(함수 템플릿)
두 집합의 합집합을 계산합니다
(함수 템플릿)
최대 힙에 요소를 추가함
(함수 템플릿)
최대 힙에서 가장 큰 요소를 제거합니다
(함수 템플릿)
요소 범위로부터 최대 힙을 생성합니다
(함수 템플릿)
최대 힙을 오름차순으로 정렬된 원소 범위로 변환합니다
(함수 템플릿)
(C++11)
주어진 범위가 최대 힙인지 확인합니다
(함수 템플릿)
최대 힙인 가장 큰 부분 범위를 찾는다
(함수 템플릿)
주어진 값들 중 더 큰 값을 반환합니다
(function template)
범위 내 가장 큰 요소를 반환합니다
(function template)
주어진 값들 중 더 작은 값을 반환합니다
(function template)
범위 내 가장 작은 요소를 반환합니다
(함수 템플릿)
(C++11)
두 요소 중 더 작은 값과 더 큰 값을 반환합니다
(함수 템플릿)
범위 내에서 가장 작은 요소와 가장 큰 요소를 반환합니다
(함수 템플릿)
한 범위가 다른 범위보다 사전식으로 작으면 true 를 반환함
(함수 템플릿)
요소 범위의 다음으로 큰 사전식 순열을 생성합니다
(함수 템플릿)
요소 범위의 다음으로 작은 사전식 순열을 생성합니다
(function template)

결함 보고서

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

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

참고 항목

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