C++ std::map'的要求是什么;s比较关于严格排序的参数?
我有一个整数类型,它表示一个环形缓冲区索引。以这种方式定义的比较少的函数:C++ std::map'的要求是什么;s比较关于严格排序的参数?,c++,dictionary,comparison,C++,Dictionary,Comparison,我有一个整数类型,它表示一个环形缓冲区索引。以这种方式定义的比较少的函数: 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
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;
}
friend bool运算符<(常量循环值和lhs、常量循环值和rhs){
UInt max=lhs.value+std::numeric_limits::max()/2;
返回值(左侧值<最大值)
?rhs.value>lhs.value&&rhs.valuelhs.value | | rhs.value
如果rhs发生在Lhs上方可用间隔的一半内,则认为Lhs低于rhs。
我想在地图中使用它作为键,但不确定它是否会导致问题。它具有不可伸缩性和不对称性,但不具有及物性。它会引起问题。如所述,比较器必须满足以下要求:
产生cmp(a,a)
false
- 如果
产生true,那么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