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
  • 如果
    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)
    产生
    false