我有一个整数类型,它代表一个环形缓冲区索引。以这种方式定义的比较函数越少:
friend bool operator < (const CircularValue & lhs, const CircularValue &rhs) {
UInt max = lhs.value + std::numeric_limits<UInt>::max() / 2;
return (lhs.value < max)
? rhs.value > lhs.value && rhs.value < max
: rhs.value > lhs.value || rhs.value < max;
}
如果rhs发生在lhs以上的可用间隔的一半,则认为Lhs低于rhs。 我想在地图中使用它作为关键,但不确定它是否会导致问题。它具有反射性和不对称性,但不具有传递性。
答案 0 :(得分:2)
会引起问题。如cppreference所述,比较器必须满足以下要求:
cmp(a,a)
收益false
cmp(a,b)
为真,则cmp(b,a)
会产生false
cmp(a,b)
== true
和cmp(b,c)
== true
,那么cmp(a,c)
也必须是true
(这将无法满足你的比较器)a
和b
要比较相等,那么cmp(a,b)
和cmp(b,a)
都会产生false