Tipos de comparación
Nota: Los tipos de comparación de Qt proporcionan una funcionalidad equivalente a sus homólogos estándar de C++20. La única razón por la que existen es para que la funcionalidad esté disponible también en compilaciones C++17. En una compilación C++20, se convierten implícitamente a y desde los tipos std, haciéndolos totalmente intercambiables. Por lo tanto, recomendamos que prefieras utilizar los tipos estándar de C++ en tu código, si ya puedes utilizar C++20 en tus proyectos. Los tipos de comparación de Qt se eliminarán en Qt 7.
Qt proporciona varios tipos de comparación para una comparación de tres vías, que son comparables contra un literal cero. Para utilizar estos tipos de comparación, es necesario incluir la cabecera <QtCompare>. Estos tipos de comparación se clasifican en función de su orden, que es un concepto matemático utilizado para describir la disposición o clasificación de los elementos. Se proporcionan las siguientes categorías:
| Tipo C | Tipo Qt | estricto | total | Ejemplo |
|---|---|---|---|---|
| std::orden_fuerte | Qt::strong_ordering | sí | sí | tipos integrales, cadenas que distinguen mayúsculas de minúsculas, QDate, QTime |
| std::ordenación_débil | Qt::weak_ordering | no | sí | cadenas que no distinguen mayúsculas de minúsculas, contenedores asociativos desordenados, QDateTime |
| std::ordenación_parcial | Qt::partial_ordering | no | no | tipos de coma flotante, QOperatingSystemVersion, QVariant |
El tipo de comparación más fuerte, Qt::strong_ordering, representa un orden total estricto. Requiere que dos elementos cualesquiera sean comparables de forma que la igualdad implique sustituibilidad. En otras palabras, los valores equivalentes no pueden distinguirse entre sí. Un ejemplo práctico sería la comparación entre mayúsculas y minúsculas de dos cadenas. Por ejemplo, al comparar los valores "Qt" y "Qt" el resultado sería Qt::strong_ordering::equal. Ambos valores son indistinguibles y todas las operaciones deterministas realizadas sobre estos valores darían resultados idénticos.
Qt::weak_ordering representa un orden total. Aunque dos valores cualesquiera deben ser comparables, los valores equivalentes pueden ser distinguibles. El ejemplo canónico aquí sería la comparación insensible a mayúsculas/minúsculas de dos cadenas. Por ejemplo, al comparar los valores "Qt" y "qt", ambos contienen las mismas letras pero con representaciones diferentes. Esta comparación daría como resultado Qt::weak_ordering::equivalent, pero no realmente Equal. Otro ejemplo sería QDateTime, que puede representar un instante dado en el tiempo en términos de hora local o de cualquier otra zona horaria, incluida la UTC. Las distintas representaciones son equivalentes, aunque sus time() y a veces date() puedan diferir.
Qt::partial_ordering representa, como su nombre indica, una ordenación parcial. Permite la posibilidad de que dos valores no sean comparables, lo que da lugar a un estado unordered. Además, valores equivalentes pueden seguir siendo distinguibles. Un ejemplo práctico sería la comparación de dos valores de coma flotante, comparando con NaN (Not-a-Number) se obtendría un resultado no ordenado. Otro ejemplo es la comparación de dos objetos QOperatingSystemVersion. Comparar versiones de dos sistemas operativos diferentes, como Android y Windows, produciría un resultado desordenado.
La utilización de estos tipos de comparación mejora la expresividad de la definición de relaciones. Además, sirven como componente fundamental para implementar la comparación tripartita con C++17.
Véase también Qt::strong_ordering, Qt::weak_ordering, y 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.