当你开了一个 set<double> 并出于某种原因向里面插入了一个 nan(通常由除以零导致),由于 nan 与任何数均不能进行比较,所以对于任意正常浮点数 aa < nannan < a 均为 false,而根据 set 设定此类情况发生说明 anan 相同(正常情况下 (a < b) == (b < a) == false 确实表示两数相同),所以你无法向 set 中插入任何元素。

而依赖 emplace 第二项返回值判断是否成功插入的小伙伴(比如我)发现无法插入元素后可能误以为该元素已经出现在 set 中。

同时由于小于符号不适用于 nan 还会导致很多其他 set 的查找函数出错。

1 条评论

  • @ 2022-3-22 16:55:31

    原来 C++ 也有 NaN 这种东西吗 🤔

    🌿 5
    • @ 2022-3-23 12:29:40

      NaN不是IEEE754规定的浮点数标准里的吗(

  • 1