struct A { int a, b, c; };
在这里,我需要使用类似
的逻辑对A的实例进行排序if (lhs.a == rhs.a) { return lhs.b < rhs.b; }
else { return lhs.c < rhs.c; }
冒泡是唯一的选择吗?我知道std::sort
失败了。
修改
std::sort
因比较逻辑不具有传递性而失败。
如果我们有k1
,k2
,k3
;由于k1 < k2
因为k1.a!=k2.a && k1.c < k2.c;
和k2 < k3
而导致k2.a != k3.a && k2.c < k3.c;
说k1 < k3
,这并不意味着k1.a == k3.a
k1.b < k2.b
,但我们不会# 39;不知道是否k1: a=0, b=3, c=5;
k2: a=1, b=4, c=6;
k3: a=0, b=2, c=7;
这是不重复。我知道,使用自定义对象进行排序是微不足道的,问题与传递比较器有关。
k1 < k2 (as k1.a != k2.a so check c: k1.c < k2.c)
k2 < k3 (as k2.a != k3.a so check c: k2.c < k3.c)
k1 < k3 ? (k1.a == k3.a so check b: k1.b > k3.b)
下面:
k1 < k2 && k2 < k3
因此k1 <k3
并不意味着.test2