这种比较称为字典顺序,是将两种不同的顺序组合为一个的更自然的方法之一。
C++ 中要求的排序称为严格弱排序。这意味着以下应该是正确的:
- 非自反性: x < x 总是错误的。
- 传递性:如果 x < y 且 y < z,则 x < z。
- 反对称:如果 x < y,则 y < x 始终为假。
- 等价的传递性:如果 x 和 y 不可比, y 和 z 不可比,则 x 和 z 不可比。
这些属性是您需要的,以确保您可以获取对象列表并将它们按升序排列。这意味着您可以std::sort
在它们上使用,或将它们存储在std::set
.
您可以通过一些数学证明,如果您有两个不同的严格弱排序,那么将它们按原样组合得到的字典顺序std::pair
也是严格弱排序。字典顺序是您可以组合严格弱排序以生成新的严格弱排序的少数几种方法之一。
但是,您建议的排序不是严格的弱排序,并且会导致某些假设被打破。特别是,考虑对 (0, 5)、(3, 3) 和 (1, 6)。则 (0, 5) 与 (3, 3) 不可比, (3, 3) 与 (1, 6) 不可比。但是,我们确实有 (0, 5) < (1, 6),这打破了等价的传递性规则。因此,许多假设等价是可传递的排序算法(包括大多数主要排序算法)将无法在您的范围内正常工作,这意味着std::sort
可能会出现不正确的行为。这也意味着您也不能将这些存储在 a 中std::set
,因为std::set
内部以某种排序顺序存储所有内容(通常是平衡的二叉搜索树),您可能会得到完全错误的结果。
希望这可以帮助!