我有一个整数类型,它表示环形缓冲区索引。 less比较函数是这样定义的:
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。 我想在 map 中使用它作为键,但不确定它是否会导致问题。它具有非自反性和不对称性,但不具有传递性。
最佳答案
这会引起问题。正如cppreference所述,比较器必须满足以下要求:
cmp(a,a)
产生false
- 如果
cmp(a,b)
产生 true,则cmp(b,a)
产生false
- 如果
cmp(a,b)
==true
且cmp(b,c)
==true
那么cmp(a,c)
也必须为true
(您的比较器不会满足这一点) - 如果
a
和b
比较相等,则cmp(a,b)
和cmp(b,a )
产量假
关于c++ - std::map 的比较参数对于严格排序有什么要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228164/