比較型の概要

注: Qt の比較型は、C++20 標準のものと同等の機能を提供します。比較型が存在する唯一の理由は、C++17 ビルドでも機能を利用できるようにするためです。C++20 ビルドでは、std 型との間で暗黙的に変換されるため、完全に互換性があります。そのため、プロジェクトで C++20 を使用できる場合は、コードで C++ 標準の型を使用することをお勧めします。Qt の比較型は Qt 7 で削除されます。

Qt では、ゼロ・リテラルと比較できる3 者間比較のための比較型をいくつか提供しています。これらの比較型を使用するには、<QtCompare> ヘッダーをインクルードする必要があります。これらの比較タイプは、要素の配置や順位を記述するために使用される数学的概念である順序に基づいて分類されています。以下のカテゴリが用意されています:

C++タイプQtタイプ厳密合計
std::strong_orderingQt::strong_orderingありあり整数型、大文字小文字を区別する文字列、QDateQTime
std::weak_orderingQt::weak_orderingいいえはい大文字小文字を区別しない文字列、順序なし連想コンテナ、QDateTime
std::partial_orderingQt::partial_orderingいいえいいえ浮動小数点型、QOperatingSystemVersionQVariant

最強の比較型、Qt::strong_ordering は、厳密な全順序を表します。この型は、2つの要素が等価であることが置換可能性を意味するような方法で比較されることを要求します。言い換えれば、等価な値を互いに区別することはできない。実際の例としては、大文字と小文字を区別して2つの文字列を比較することが挙げられます。例えば、"Qt""Qt" という値を比較すると、結果はQt::strong_ordering::equal となる。どちらの値も区別できないので、これらの値に対して行われる決定論的な演算はすべて同じ結果をもたらす。

Qt::weak_ordering は全順序を表す。どのような2つの値でも比較可能である必要はあるが、等価な値は区別可能かもしれない。典型的な例は、2つの文字列の大文字小文字を区別しない比較である。例えば、 と という値を比較する場合、どちらも同じ文字を保持しているが、表現が異なる。この比較の結果は となるが、実際には とはならない。別の例としては、 がある瞬間の時刻を、ローカルタイムで表すことも、UTCを含むその他のタイムゾーンで表すこともできる。 、時には が異なっていても、異なる表現は等価である。"Qt" "qt" Qt::weak_ordering::equivalent Equal QDateTime time() date()

Qt::partial_ordering はその名の通り、部分的な順序を表します。これは、2つの値が比較できない可能性を許容し、その結果 。さらに、同等の値であっても区別が可能な場合もあります。NaN(Not-a-Number)と比較すると、順序のない結果が得られます。別の例としては、2つの オブジェクトの比較がある。AndroidとWindowsのような2つの異なるオペレーティング・システムのバージョンを比較すると、順序なしの結果が得られます。unordered QOperatingSystemVersion

これらの比較タイプを利用することで、関係定義の表現力が高まります。さらに、C++17 で 3 者間比較を実装するための基本コンポーネントとしても機能します。

Qt::strong_orderingQt::weak_orderingQt::partial_orderingも参照してください

このドキュメントに含まれるコントリビューションの著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。