functional_less
functional_less (std::less 비교 함수 객체)
이 페이지는 C++ 표준 라이브러리의 std::less 함수 객체에 대해 설명해요. std::less는 두 값을 비교해서 첫 번째 값이 두 번째 값보다 작은지 확인하는 데 사용해요. 기본 템플릿은 T 타입에 대해 operator<를 호출해요.
출처: cppreference
본문
정의
<functional> 헤더에 정의됨 |
||
|---|---|---|
template < class T > struct less ; |
(C++14까지) | |
template < class T = void > struct less ; |
(C++14부터) |
설명
비교를 수행하는 함수 객체예요. 기본 템플릿은 T 타입에 대해 operator<를 호출해요.
특수화
less<void> (C++14) |
인자와 반환 타입을 추론하여 x < y를 구현하는 함수 객체 (클래스 템플릿 특수화) |
|---|
멤버 타입
| 타입 | 정의 |
|---|---|
result_type (C++17에서 deprecated, C++20에서 제거) |
bool |
first_argument_type (C++17에서 deprecated, C++20에서 제거) |
T |
second_argument_type (C++17에서 deprecated, C++20에서 제거) |
T |
이 멤버 타입들은 std::binary_function<T, T, bool>을 공개 상속하여 얻어요. (C++11까지)
멤버 함수
operator() |
첫 번째 인자가 두 번째 인자보다 작은지 확인해요 (공개 멤버 함수) |
|---|
std::less::operator()
bool operator()( const T& lhs, const T& rhs ) const; |
(C++14부터 constexpr) |
|---|
lhs가 rhs보다 작은지 확인해요.
매개변수
| lhs, rhs | - | 비교할 값들 |
|---|
반환값
lhs < rhs.
T가 포인터 타입이라면, 결과는 구현에서 정의된 포인터의 엄격한 전체 순서(strict total order)와 일관돼요.
예외
구현에서 정의된 예외를 던질 수 있어요.
가능한 구현
constexpr bool operator ()( const T & lhs , const T & rhs ) const { return lhs < rhs ; // assumes that the implementation handles pointer total order }
예제
#include <functional>
template<typename A, typename B, typename C = std::less<>>
constexpr bool fun(A a, B b, C cmp = C{})
{
return cmp(a, b);
}
static_assert(fun(1, 2) == true);
static_assert(fun(1.0, 1) == false);
static_assert(fun(1, 2.0) == true);
static_assert(std::less<int>{}(5, 5.6) == false); // 5 < 5 (warn: implicit conversion)
static_assert(std::less<double>{}(5, 5.6) == true); // 5.0 < 5.6
static_assert(std::less<int>{}(5.6, 5.7) == false); // 5 < 5 (warn: implicit conversion)
static_assert(std::less{}(5, 5.6) == true); // less<void>: 5.0 < 5.6
int main() {}
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었어요.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2562 | C++98 | 포인터 전체 순서가 일관되지 않을 수 있었음 | 일관성이 보장됨 |
같이 보기
equal_to |
x == y를 구현하는 함수 객체 (클래스 템플릿) |
|---|---|
greater |
x > y를 구현하는 함수 객체 (클래스 템플릿) |
ranges::less (C++20) |
x < y를 구현하는 제약된 함수 객체 (클래스) |