Übersicht über Vergleichstypen

Hinweis: Die Vergleichstypen von Qt bieten die gleiche Funktionalität wie ihre Gegenstücke im C++20-Standard. Der einzige Grund, warum sie existieren, ist, um die Funktionalität auch in C++17-Builds verfügbar zu machen. In einem C++20-Build konvertieren sie implizit zu und von den std -Typen, wodurch sie vollständig austauschbar sind. Wir empfehlen daher, dass Sie in Ihrem Code lieber die C++-Standardtypen verwenden, wenn Sie in Ihren Projekten bereits C++20 verwenden können. Die Qt-Vergleichstypen werden in Qt 7 entfernt.

Qt bietet mehrere Vergleichstypen für einen Drei-Wege-Vergleich, die mit einem Null-Literal vergleichbar sind. Um diese Vergleichstypen zu verwenden, müssen Sie den <QtCompare> Header einbinden. Diese Vergleichstypen sind nach ihrer Reihenfolge kategorisiert, die ein mathematisches Konzept zur Beschreibung der Anordnung oder Rangfolge von Elementen ist. Die folgenden Kategorien werden angeboten:

C++-TypQt-TypstrenggesamtBeispiel
std::strong_orderingQt::strong_orderingjajaGanzzahlige Typen, Zeichenketten unter Berücksichtigung der Groß-/Kleinschreibung, QDate, QTime
std::weak_orderingQt::weak_orderingneinjaZeichenketten ohne Berücksichtigung der Groß-/Kleinschreibung, ungeordnete assoziative Container, QDateTime
std::partial_orderingQt::partial_orderingneinneinGleitkomma-Typen, QOperatingSystemVersion, QVariant

Der stärkste Vergleichstyp, Qt::strong_ordering, stellt eine strenge Gesamtordnung dar. Er erfordert, dass zwei Elemente auf eine Weise vergleichbar sind, bei der Gleichheit Ersetzbarkeit impliziert. Mit anderen Worten: Gleichwertige Werte können nicht voneinander unterschieden werden. Ein praktisches Beispiel wäre der Vergleich zweier Zeichenketten unter Berücksichtigung der Groß- und Kleinschreibung. Wenn man beispielsweise die Werte "Qt" und "Qt" vergleicht, wäre das Ergebnis Qt::strong_ordering::equal. Beide Werte sind ununterscheidbar und alle deterministischen Operationen, die mit diesen Werten durchgeführt werden, würden identische Ergebnisse liefern.

Qt::weak_ordering stellt eine Gesamtordnung dar. Während zwei beliebige Werte noch vergleichbar sein müssen, können gleichwertige Werte unterscheidbar sein. Das kanonische Beispiel hierfür ist der Vergleich zweier Zeichenketten ohne Berücksichtigung der Groß- und Kleinschreibung. Wenn man beispielsweise die Werte "Qt" und "qt" vergleicht, enthalten beide die gleichen Buchstaben, aber in unterschiedlicher Darstellung. Dieser Vergleich würde zu Qt::weak_ordering::equivalent führen, aber nicht zu Equal. Ein anderes Beispiel wäre QDateTime, das einen bestimmten Zeitpunkt in Form der Ortszeit oder einer anderen Zeitzone, einschließlich UTC, darstellen kann. Die verschiedenen Darstellungen sind gleichwertig, auch wenn ihre time() und manchmal date() unterschiedlich sein können.

Qt::partial_ordering stellt, wie der Name schon sagt, eine partielle Ordnung dar. Sie lässt die Möglichkeit zu, dass zwei Werte nicht vergleichbar sind, was zu einem unordered Zustand führt. Außerdem können gleichwertige Werte immer noch unterscheidbar sein. Ein praktisches Beispiel wäre der Vergleich von zwei Fließkommawerten, wobei der Vergleich mit NaN (Not-a-Number) ein ungeordnetes Ergebnis liefern würde. Ein anderes Beispiel ist der Vergleich von zwei QOperatingSystemVersion Objekten. Der Vergleich von Versionen zweier unterschiedlicher Betriebssysteme, wie Android und Windows, würde ein ungeordnetes Ergebnis liefern.

Die Verwendung dieser Vergleichstypen erhöht die Ausdruckskraft bei der Definition von Beziehungen. Außerdem dienen sie als grundlegende Komponente für die Implementierung von Drei-Wege-Vergleichen mit C++17.

Siehe auch Qt::strong_ordering, Qt::weak_ordering, und Qt::partial_ordering.

© 2025 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.