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)

lhsrhs보다 작은지 확인해요.

매개변수

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를 구현하는 제약된 함수 객체 (클래스)

더 알아보기 (Learn more)

cppreference