比较类型概述

注意: Qt 的比较类型提供了与 C++20 标准对应的功能。它们存在的唯一原因是使这些功能也能在 C++17 版本中使用。在 C++20 版本中,它们隐式地转换为std 类型,使它们完全可以互换。因此,如果您已经可以在项目中使用 C++20,我们建议您在代码中使用 C++ 标准类型。Qt 比较类型将在 Qt 7 中移除。

Qt 为三向比较提供了几种比较类型,可与零字面进行比较。要使用这些比较类型,您需要包含<QtCompare> 头文件。这些比较类型根据其顺序进行分类,顺序是一个数学概念,用于描述元素的排列或排序。提供了以下类别:

C++ 类型Qt 类型严格总计示例
std::strong_orderingQt::strong_ordering积分类型、区分大小写的字符串、QDateQTime
std::weak_orderingQt::weak_ordering不区分大小写的字符串、无序关联容器、QDateTime
std::partial_orderingQt::partial_ordering浮点类型,QOperatingSystemVersionQVariant

最强比较类型Qt::strong_ordering 代表严格的总排序。它要求任何两个元素的可比性都是相等的,相等意味着可替代性。换句话说,相等的值不能相互区分。一个实际的例子就是两个字符串的大小写比较。例如,当比较"Qt""Qt" 时,结果将是Qt::strong_ordering::equal 。这两个值是无法区分的,对这两个值进行的所有确定性操作都会产生相同的结果。

Qt::weak_ordering 表示总顺序。虽然任何两个值都需要具有可比性,但等价值可能是可以区分的。最典型的例子就是对两个字符串进行大小写不敏感的比较。例如,当比较 和 这两个值时,它们都包含相同的字母,但表示方法不同。这种比较的结果是 ,但实际上不是 。另一个例子是 ,它可以用当地时间或任何其他时区(包括 UTC)来表示给定的瞬间时间。不同的表示法是等价的,尽管它们的 和 有时可能不同。"Qt" "qt" Qt::weak_ordering::equivalent Equal QDateTime time() date()

Qt::partial_ordering 部分排序,顾名思义,表示部分排序。它允许两个值可能不具有可比性,从而导致 状态。此外,相等的值仍然可以区分。一个实际的例子是两个浮点数值的比较,与 NaN(Not-a-Number)比较会产生一个无序的结果。另一个例子是比较两个 对象。比较两个不同操作系统的版本(如 Android 和 Windows)会产生无序结果。unordered QOperatingSystemVersion

利用这些比较类型增强了定义关系的表现力。此外,它们还是使用 C++17 实现三向比较的基本组件。

另请参见 Qt::strong_orderingQt::weak_orderingQt::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.