<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() およびフリー関数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型がcompareThreeWay() のサポート対象となるため、Qt型に対して を再実装しないでください。

この関数は、主に汎用コード内で、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.