zoukankan      html  css  js  c++  java
  • 条目二十一《总是让比较函数在等值情况下返回false》

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

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

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

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

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

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

    总结下:

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

  • 相关阅读:
    Flask 开启跨域
    pandas to dict
    mongodb 聚合查询
    flask 获取请求参数
    CSS dppx详解
    用CSS做出漂亮的字体动画
    VMware虚拟主机安装完成后连接不上网络
    wokerman中自定义协议的使用和测试
    使用workerman写一个小的聊天室
    telnet不能使用怎么办?
  • 原文地址:https://www.cnblogs.com/liangjf/p/10275032.html
Copyright © 2011-2022 走看看