Vue d'ensemble des types de comparaison

Note : Les types de comparaison de Qt fournissent des fonctionnalités équivalentes à leurs homologues standard C++20. La seule raison de leur existence est de rendre cette fonctionnalité disponible dans les versions C++17. Dans une version C++20, ils se convertissent implicitement vers et depuis les types std, ce qui les rend totalement interchangeables. Nous vous recommandons donc d'utiliser les types standard C++ dans votre code, si vous pouvez déjà utiliser C++20 dans vos projets. Les types de comparaison de Qt seront supprimés dans Qt 7.

Qt fournit plusieurs types de comparaison pour une comparaison à trois, qui sont comparables à un littéral zéro. Pour utiliser ces types de comparaison, vous devez inclure l'en-tête <QtCompare>. Ces types de comparaison sont classés en fonction de leur ordre, qui est un concept mathématique utilisé pour décrire l'arrangement ou le classement d'éléments. Les catégories suivantes sont fournies :

Type C++Type QtstricttotalExemple
std::strong_orderingQt::strong_orderingouiouitypes intégraux, chaînes de caractères sensibles à la casse, QDate, QTime
std::weak_orderingQt::weak_orderingnonouichaînes insensibles à la casse, conteneurs associatifs non ordonnés, QDateTime
std::partial_orderingQt::partial_orderingnonnontypes à virgule flottante, QOperatingSystemVersion, QVariant

Le type de comparaison le plus fort, Qt::strong_ordering, représente un ordre total strict. Il exige que deux éléments soient comparables d'une manière où l'égalité implique la substituabilité. En d'autres termes, les valeurs équivalentes ne peuvent être distinguées l'une de l'autre. Un exemple pratique serait la comparaison sensible à la casse de deux chaînes de caractères. Par exemple, si l'on compare les valeurs "Qt" et "Qt", le résultat sera Qt::strong_ordering::equal. Les deux valeurs sont indiscernables et toutes les opérations déterministes effectuées sur ces valeurs produiraient des résultats identiques.

Qt::weak_ordering représente un ordre total. Bien que deux valeurs doivent toujours être comparables, des valeurs équivalentes peuvent être distinguées. L'exemple canonique serait la comparaison insensible à la casse de deux chaînes de caractères. Par exemple, si l'on compare les valeurs "Qt" et "qt", elles contiennent toutes deux les mêmes lettres, mais avec des représentations différentes. Cette comparaison aboutirait à Qt::weak_ordering::equivalent, mais pas à Equal. Un autre exemple serait QDateTime, qui peut représenter un instant donné en termes d'heure locale ou de tout autre fuseau horaire, y compris UTC. Les différentes représentations sont équivalentes, même si leurs time() et parfois date() peuvent différer.

Qt::partial_ordering représente, comme son nom l'indique, un ordre partiel. Il autorise la possibilité que deux valeurs ne soient pas comparables, ce qui se traduit par un état unordered. En outre, des valeurs équivalentes peuvent encore être distinguées. Un exemple pratique serait la comparaison de deux valeurs à virgule flottante, la comparaison avec NaN (Not-a-Number) produirait un résultat non ordonné. Un autre exemple est la comparaison de deux objets QOperatingSystemVersion. La comparaison des versions de deux systèmes d'exploitation différents, tels qu'Android et Windows, produirait un résultat non ordonné.

L'utilisation de ces types de comparaison améliore l'expressivité de la définition des relations. En outre, ils constituent un élément fondamental pour la mise en œuvre de la comparaison à trois voies en C++17.

Voir également Qt::strong_ordering, Qt::weak_ordering, et 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.