首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Effective STL(21) 永远让比较函数对相同元素返回false

Effective STL(21) 永远让比较函数对相同元素返回false

作者头像
早起的鸟儿有虫吃
发布于 2018-04-13 11:14:03
发布于 2018-04-13 11:14:03
2.3K0
举报
文章被收录于专栏:算法之美算法之美

问题描述:

昨天一哥们些的程序,在定义比较函数的时候是这样写的

代码语言:javascript
复制
bool cmp(const T& a, const T& b)
{
    if (a >= b)  
        return true;
   return false;
}

在内部测试时,一直表现挺好,也没挂。 但一到线上,立即就挂了,打印出vector内的元素也都是正确的, 但是core在了 STL:sort里面了, 而且指针明显也是错的了。

原因分析:

stl:sort 排序 如果数据过多 才会用快速排序

所有数据进行与中间值比较的时候是无边界保护的,

当我们的容器里面所有值都相等,而comp()函数对相等返回true的时候,在进行快速排序的时候,迭代器就会越界失效。‍

++first 可能越界

解决办法:

代码语言:javascript
复制
bool cmp(const T& a, const T& b)
{
 if (a > b) 
        return true;
   return false;
}

effective stl 第21条:总是让比较函数在等值情况下返回false

扩展问题:

Q 在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,

你如何调试这个bug?

A: 参考 https://zhuanlan.zhihu.com/p/21348220

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档