Présentation des types de comparaison

Remarque : les types de comparaisonde Qt offrent des fonctionnalités équivalentes à celles de leurs homologues de la norme C++20. Leur seule raison d'être est de rendre ces fonctionnalités disponibles également dans les versions C++17. Dans une version C++20, ils sont implicitement convertis vers et depuis les types ` std `, ce qui les rend entièrement interchangeables. Nous vous recommandons donc de privilégier l'utilisation des types standard C++ dans votre code, si vous pouvez déjà utiliser C++20 dans vos projets. Les types de comparaison Qt seront supprimés dans Qt 7.

Qt fournit plusieurs types de comparaison permettant une comparaison à trois voies, 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, un concept mathématique utilisé pour décrire la disposition ou le classement des éléments. Les catégories suivantes sont disponibles :

Type C++Type QtstricttotalExemple
std::strong_orderingQt::strong_orderingouiouitypes entiers, chaînes de caractères sensibles à la casse, QDate, QTime
std::weak_orderingQt::weak_orderingnonouichaînes de caractères 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 quelconques soient comparables de telle sorte que l'égalité implique la substituabilité. En d'autres termes, des valeurs équivalentes ne peuvent pas être distinguées les unes des autres. Un exemple concret serait la comparaison sensible à la casse de deux chaînes de caractères. Par exemple, en comparant les valeurs "Qt" et "Qt", le résultat serait Qt::strong_ordering::equal. Ces deux valeurs sont indiscernables et toutes les opérations déterministes effectuées sur ces valeurs donneraient des résultats identiques.

Qt::weak_ordering représente un ordre total. Bien que deux valeurs quelconques doivent toujours être comparables, des valeurs équivalentes peuvent être distinguables. L’exemple canonique ici serait la comparaison de deux chaînes de caractères sans distinction de casse. Par exemple, lors de la comparaison des valeurs "Qt" et "qt", celles-ci contiennent les mêmes lettres mais sont représentées différemment. Cette comparaison donnerait Qt::weak_ordering::equivalent, mais pas Equal. Un autre exemple serait QDateTime, qui peut représenter un instant donné en heure locale ou dans n’importe quel autre fuseau horaire, y compris l’UTC. Les différentes représentations sont équivalentes, même si leur time() et parfois leur date() peuvent différer.

Qt::partial_ordering représente, comme son nom l’indique, un ordre partiel. Il permet la possibilité que deux valeurs ne soient pas comparables, ce qui entraîne un état « unordered ». De plus, des valeurs équivalentes peuvent tout de même être distinguables. Un exemple concret serait la comparaison de deux valeurs à virgule flottante : la comparaison avec NaN (Not-a-Number) donnerait un résultat non ordonné. Un autre exemple est la comparaison de deux objets de type « 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 la capacité d'expression lors de la définition de relations. De plus, ils constituent un élément fondamental pour la mise en œuvre de la comparaison à trois voies avec 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.