• 条目二十一《总是让比较函数在等值情况下返回false》


    条目二十一《总是让比较函数在等值情况下返回false》

    这条目对序列容器是不适合的,因为序列容器就是通过等值判断来比较的。

    对于关联容器来说,比较是等价比较,所以要注意等值的时候,比较子的返回值。

    关联容器的find、insert等都是通过等价来判断元素是否已存在的。

    注意关联容器的等价表达式if(!(except1)&&!(except2))。如果是等值判断返回是true,那么except1和except2为x<=y为true,y<=x为true,整个判别式为false,假如x,y分别为hello,hello,那么对于insert来说,在插入的时候对于插入同一元素,其实是可以插入的,这样的话就破坏了关联容器的数据结构存储结构了,对于容器的破坏是极大的,会造成一些成员函数的操作是未知的。

    同时要注意,本来是因为关联容器排序时是 默认是<排列的,也就是升序排列,如果要降序排列,直接重写比较子的判别式为!<,这样不会得到>的结果,而是>=,这样的话就会出现等值出现结果为true的情况,这样是不正确的。所以应该改为>,而不是直接对<取反。

    总结下:

    在重写关联容器的比较子时,需要万分注意等值情况下的返回值,必须是返回false。

  • 相关阅读:
    Mysql探索之索引详解,又能和面试官互扯了~
    POJ 1163
    POJ 1157
    POJ 1143
    POJ 1164
    HDU 2553
    POJ 1321
    POJ 1125
    POJ 2488
    POJ 3083
  • 原文地址:https://www.cnblogs.com/liangjf/p/10275032.html
Copyright © 2020-2023  润新知