<QtCompare> - Classes and helpers for defining comparison operators

<QtCompare> 헤더 파일은 Qt::*_ordering 유형과 비교 연산자를 정의하기 위한 헬퍼 매크로를 정의합니다. 더 보기...

Header: #include <QtCompare>

형

함수

(since 6.7) Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)
(since 6.7) auto compareThreeWay(FloatType lhs, IntType rhs)
(since 6.7) auto compareThreeWay(IntType lhs, FloatType rhs)
(since 6.7) auto compareThreeWay(LeftFloat lhs, RightFloat rhs)
(since 6.7) auto compareThreeWay(LeftInt lhs, RightInt rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, Qt::totally_ordered_wrapper<U *> rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, U *rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, std::nullptr_t rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(U *lhs, Qt::totally_ordered_wrapper<T *> rhs)
(since 6.12) auto compareThreeWay(const std::pair<T1, T2> &lhs, const std::pair<U1, U2> &rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(std::nullptr_t lhs, Qt::totally_ordered_wrapper<T *> rhs)
(since 6.7) auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

상세 설명

이 헤더는 Qt::partial_ordering, Qt::weak_ordering 및 Qt::strong_ordering 유형을 소개하며, 이들은 std::*_ordering 유형을 Qt에서 C++17로 이식한 것입니다.

이 헤더에는 C++17에서 3자 비교를 구현하기 위한 함수도 포함되어 있습니다.

Qt::compareThreeWay() 함수의 오버로드는 내장 C++ 타입에 대한 3자 비교 기능을 제공합니다.

qCompareThreeWay() 템플릿은 범용 3자 비교 구현 역할을 합니다. 이 템플릿의 구현은 Qt::compareThreeWay() 및 free compareThreeWay() 함수에 의존합니다.

유형 문서

[alias, since 6.12] template <typename T, typename U> if_has_qt_compare_three_way

std::enable_if_t 의 편리한 별칭으로, compareThreeWay() 를 통해 3방향 비교를 지원하는 유형으로 함수 템플릿을 제한하는 데 사용할 수 있습니다.

이 typedef는 Qt 6.12에서 도입되었습니다.

Qt::has_qt_compare_three_way도 참조하십시오 .

함수 문서

[constexpr noexcept, since 6.7] template <typename Enum> requires if_enum<Enum> Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)

열거형에 대한 3자 비교를 구현합니다.

이 함수는 ` Enum `를 기본 유형으로 변환한 후 정수형에 대한 오버로드를 호출합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 의 인스턴스를 반환합니다.

제약 조건

Enum 가 열거형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.7에서 도입되었습니다.

[constexpr noexcept, since 6.7] template <typename FloatType, typename IntType> requires if_floating_point<FloatType> && if_integral<IntType> auto compareThreeWay(FloatType lhs, IntType rhs)

부동소수점 및 정수형에 대한 3자 비교를 구현합니다.

이 함수는 ` rhs `를 ` FloatType `로 변환하고, 부동 소수점 유형에 대한 오버로드를 호출합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::partial_ordering 의 인스턴스를 반환합니다. lhs 가 숫자가 아닌 경우(NaN), Qt::partial_ordering::unordered 이 반환됩니다.

제약 조건

FloatType 가 내장 부동소수점 유형이고 IntType 가 내장 정수 유형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.7에서 도입되었습니다.

[constexpr noexcept, since 6.7] template <typename IntType, typename FloatType> requires if_integral<IntType> && if_floating_point<FloatType> auto compareThreeWay(IntType lhs, FloatType rhs)

정수형 및 부동소수점형에 대한 3자 비교를 구현합니다.

이 함수는 ` lhs `를 ` FloatType `로 변환하고, 부동 소수점 유형에 대해서는 오버로드를 호출합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::partial_ordering 인스턴스를 반환합니다. rhs 가 숫자가 아닌 경우(NaN), Qt::partial_ordering::unordered 가 반환됩니다.

제약 조건

IntType 가 내장 정수형이고 FloatType 가 내장 부동소수점형일 때만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.7에서 도입되었습니다.

[constexpr noexcept, since 6.7] template <typename LeftFloat, typename RightFloat> requires if_floating_point<LeftFloat> && if_floating_point<RightFloat> auto compareThreeWay(LeftFloat lhs, RightFloat rhs)

부동소수점 유형에 대한 3자 비교를 구현합니다.

LeftFloat 와 RightFloat 가 내장 부동 소수점 유형인 경우, lhs <=> rhs 를 반환합니다. operator<=>() 와 달리, 이 함수 템플릿은 C++17에서도 사용할 수 있습니다. 자세한 내용은 cppreference를 참조하십시오.

이 함수는 내장형으로 표현된 사용자 정의 클래스의 멤버를 정렬할 때, 사용자 정의 compareThreeWay() 함수에서도 사용할 수 있습니다:

class MyClass {
public:
    ...
private:
    double value;
    ...
    friend Qt::partial_ordering
    compareThreeWay(const MyClass &lhs, const MyClass &rhs) noexcept
    { return Qt::compareThreeWay(lhs.value, rhs.value); }
    Q_DECLARE_PARTIALLY_ORDERED(MyClass)
};

lhs 와 rhs 간의 관계를 나타내는 ` Qt::partial_ordering ` 인스턴스를 반환합니다. lhs 또는 rhs 가 숫자가 아닌 경우(NaN), Qt::partial_ordering::unordered 가 반환됩니다.

제약 조건

LeftFloat 와 RightFloat 가 모두 내장 부동소수점 유형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.7에서 도입되었습니다.

[constexpr noexcept, since 6.7] template <typename LeftInt, typename RightInt> requires if_integral<LeftInt> && if_integral<RightInt> auto compareThreeWay(LeftInt lhs, RightInt rhs)

정수형에 대한 3자 비교를 구현합니다.

LeftInt 와 RightInt 가 내장 정수형인 경우, ` lhs <=> rhs`를 반환합니다. ` operator<=>()`와 달리, 이 함수 템플릿은 C++17에서도 사용할 수 있습니다. 자세한 내용은 cppreference를 참조하십시오.

이 함수는 내장형으로 표현된 사용자 정의 클래스의 멤버를 정렬할 때, 사용자 정의 ` compareThreeWay() ` 함수에서도 사용할 수 있습니다:

class MyClass {
public:
    ...
private:
    int value;
    ...
    friend Qt::strong_ordering
    compareThreeWay(const MyClass &lhs, const MyClass &rhs) noexcept
    { return Qt::compareThreeWay(lhs.value, rhs.value); }
    Q_DECLARE_STRONGLY_ORDERED(MyClass)
};

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 인스턴스를 반환합니다.

제약 조건

LeftInt 와 RightInt 가 모두 내장 정수형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.7에서 도입되었습니다.

[constexpr noexcept, since 6.8] template <typename T, typename U> requires if_compatible_pointers<T, U> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, Qt::totally_ordered_wrapper<U *> rhs)

Qt::totally_ordered_wrapper 로 래핑된 포인터에 대한 3자 비교를 구현합니다. 비교 시 포인터에 대한 엄격한 전체 순서를 사용합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 인스턴스를 반환합니다.

제약 조건

T 와 U 가 동일한 유형이거나, 기저 유형과 파생 유형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.8에서 도입되었습니다.

[constexpr noexcept, since 6.8] template <typename T, typename U> requires if_compatible_pointers<T, U> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, U *rhs)

Qt::totally_ordered_wrapper 로 래핑된 포인터와 일반 포인터 간의 3자 비교를 구현합니다. 비교 시 포인터에 대한 엄격한 전체 순서를 사용합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 인스턴스를 반환합니다.

제약 조건

T 와 U 가 동일한 유형이거나, 기저 유형과 파생 유형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.8에서 도입되었습니다.

[constexpr noexcept, since 6.8] template <typename T> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, std::nullptr_t rhs)

Qt::totally_ordered_wrapper 로 래핑된 포인터와 std::nullptr_t 간의 3자 비교를 구현합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 의 인스턴스를 반환합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.8에서 도입되었습니다.

[constexpr noexcept, since 6.8] template <typename T, typename U> requires if_compatible_pointers<T, U> Qt::strong_ordering compareThreeWay(U *lhs, Qt::totally_ordered_wrapper<T *> rhs)

일반 포인터와 ` Qt::totally_ordered_wrapper`로 래핑된 포인터 간의 3자 비교를 구현합니다. 비교 시 포인터 간의 엄격한 전체 순서를 사용합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 의 인스턴스를 반환합니다.

제약 조건

T 와 U 가 동일한 유형이거나, 기저 유형과 파생 유형인 경우에만 오버로드 해결에 참여합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.8에서 도입되었습니다.

[since 6.12] template < typename T1, typename T2, typename U1, typename U2 > auto compareThreeWay(const std::pair<T1, T2> &lhs, const std::pair<U1, U2> &rhs)

참고: T1 는 U1 와 비교 가능해야 하며, T2 는 U2 와 비교 가능해야 합니다( compareThreeWay() 또는 operator<() 사용).

이 오버로드는 auto 반환 유형을 사용하는데, 이는 정렬의 강도가 쌍의 템플릿 인자에 따라 달라지기 때문입니다. 예를 들어, 인자 중 하나가 부동 소수점 유형이면 정렬 순서는 Qt::partial_ordering 가 되고, 둘 다 정수 유형이면 Qt::strong_ordering 가 됩니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.12에서 도입되었습니다.

[constexpr noexcept, since 6.8] template <typename T> Qt::strong_ordering compareThreeWay(std::nullptr_t lhs, Qt::totally_ordered_wrapper<T *> rhs)

std::nullptr_t 와 Qt::totally_ordered_wrapper 로 래핑된 포인터 간의 3자 비교를 구현합니다.

lhs 와 rhs 간의 관계를 나타내는 Qt::strong_ordering 의 인스턴스를 반환합니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.8에서 도입되었습니다.

[since 6.7] template <typename LeftType, typename RightType> auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

lhs 및 rhs 에 대해 3방향 비교를 수행하고, 그 결과로 Qt 정렬 유형 중 하나를 반환합니다. 이 함수는 C++17과 C++20 모두에서 사용할 수 있습니다.

실제로 반환되는 유형은 ` LeftType `와 ` RightType`에 따라 달라집니다.

참고: 이 함수 템플릿은 compareThreeWay() 가 (LeftType, RightType) 쌍 또는 그 반대의 (RightType, LeftType) 쌍에 대해 구현된 경우에만 사용할 수 있습니다.

이 메서드는 다음과 동일합니다.

using Qt::compareThreeWay;
return compareThreeWay(lhs, rhs);

여기서 Qt::compareThreeWay 는 내장형에 대한 3방향 비교의 Qt 구현체입니다.

사용자 정의 유형에 대해서는 자유 compareThreeWay 함수가 3방향 비교를 제공해야 합니다. 이 함수는 Qt 정렬 유형 중 하나를 반환해야 합니다.

Qt는 일부 유형에 대해 compareThreeWay 구현을 제공합니다.

참고: 향후 Qt 릴리스에서 더 많은 Qt 유형이 이를 지원하게 될 예정이므로, Qt 유형에 대해 compareThreeWay() 를 재구현하지 마십시오.

LeftType 와 RightType 에 대해 전혀 알지 못하는 경우, 주로 일반 코드에서 이 함수를 사용하십시오.

타입을 알고 있는 경우에는

  • Qt::compareThreeWay 내장 유형의 경우
  • compareThreeWay 사용자 정의 유형의 경우

C++20 이상으로만 컴파일되는 코드에서는 ` operator<=>() `를 직접 사용하십시오.

이 함수는 Qt 6.7에서 도입되었습니다.

Qt::partial_ordering, Qt::weak_ordering 및 Qt::strong_ordering도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.