비교 유형 개요
참고: Qt의 비교 유형은 C++20 표준에 명시된 비교 유형과 동등한 기능을 제공합니다. 이 유형들이 존재하는 유일한 이유는 C++17 빌드에서도 해당 기능을 사용할 수 있도록 하기 위함입니다. C++20 빌드에서는 이 유형들이 std 유형으로 암시적으로 변환되거나 그 반대로 변환되므로, 완전히 상호 교환이 가능합니다. 따라서 프로젝트에서 이미 C++20을 사용할 수 있다면, 코드에서 C++ 표준 유형을 우선적으로 사용하는 것을 권장합니다. Qt 비교 유형은 Qt 7에서 제거될 예정입니다.
Qt는 0 리터럴과 비교 가능한 3자 비교를 위한 여러 비교 유형을 제공합니다. 이러한 비교 유형을 사용하려면 <QtCompare> 헤더를 포함해야 합니다. 이 비교 유형들은 요소의 배열이나 순위를 설명하는 데 사용되는 수학적 개념인 ‘순서’에 따라 분류됩니다. 다음과 같은 범주가 제공됩니다:
| C++ 유형 | Qt 유형 | 엄격 | total | 예시 |
|---|---|---|---|---|
| std::strong_ordering | Qt::strong_ordering | 예 | 예 | 정수형, 대소문자를 구분하는 문자열, QDate, QTime |
| std::weak_ordering | Qt::weak_ordering | 아니요 | 예 | 대소문자를 구분하지 않는 문자열, 정렬되지 않은 연관 컨테이너, QDateTime |
| std::partial_ordering | Qt::partial_ordering | 아니요 | 아니요 | 부동 소수점 유형, QOperatingSystemVersion, QVariant |
가장 강력한 비교 유형인 Qt::strong_ordering 는 엄격한 전체 순서를 나타냅니다. 이는 어떤 두 요소라도 등가가 대체 가능성을 의미하는 방식으로 비교 가능해야 함을 요구합니다. 다시 말해, 동등한 값들은 서로 구별될 수 없습니다. 실제 예로는 두 문자열의 대소문자를 구분하는 비교를 들 수 있습니다. 예를 들어, "Qt" 와 "Qt" 값을 비교할 때 결과는 Qt::strong_ordering::equal 이 됩니다. 두 값은 구별할 수 없으며, 이 값들에 대해 수행되는 모든 결정론적 연산은 동일한 결과를 산출합니다.
Qt::weak_ordering 이는 전순서(total order)를 나타냅니다. 임의의 두 값은 여전히 비교 가능해야 하지만, 동등한 값들끼리도 구별될 수 있습니다. 이에 대한 대표적인 예로는 두 문자열의 대소문자를 구분하지 않는 비교를 들 수 있습니다. 예를 들어, "Qt" 와 "qt" 값을 비교할 때, 두 값은 동일한 문자를 포함하지만 표현 방식이 다릅니다. 이 비교의 결과는 Qt::weak_ordering::equivalent 가 되지만, 실제로는 Equal 가 아닙니다. 또 다른 예로는 QDateTime 가 있는데, 이는 현지 시간이나 UTC를 포함한 다른 시간대를 기준으로 특정 순간을 나타낼 수 있습니다. time() 와 때로는 date() 가 다를 수 있더라도, 서로 다른 표현 방식은 동등합니다.
Qt::partial_ordering 이름에서 알 수 있듯이, 이는 부분 순서를 나타냅니다. 두 값이 비교 불가능할 수 있는 가능성을 허용하며, 이 경우 unordered 상태가 발생합니다. 또한, 동등한 값이라도 여전히 구별될 수 있습니다. 실제 예로 두 부동 소수점 값을 비교하는 경우를 들 수 있는데, NaN(Not-a-Number)과 비교하면 순서가 없는 결과가 나옵니다. 또 다른 예로는 두 개의 ` QOperatingSystemVersion ` 객체 비교가 있습니다. 안드로이드와 윈도우와 같이 서로 다른 운영 체제의 버전을 비교하면 순서가 정해지지 않은 결과가 나옵니다.
이러한 비교 유형을 활용하면 관계 정의의 표현력을 높일 수 있습니다. 또한, 이는 C++17에서 3자 비교를 구현하기 위한 기본 구성 요소로 작용합니다.
Qt::strong_ordering, Qt::weak_ordering, Qt::partial_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.