gpt4 book ai didi

c++ - std::map 的比较参数关于严格排序的要求是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:12 24 4
gpt4 key购买 nike

我有一个整数类型,它代表一个环形缓冲区索引。 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)==truecmp(b,c)==true 然后 cmp(a,c) 也必须是 true(这不会被你的比较器满足)
  • 如果 ab 比较相等,则 cmp(a,b)cmp(b,a ) 产生 false

关于c++ - std::map 的比较参数关于严格排序的要求是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com