std::sort函数中的陷阱

来源:互联网 发布:深圳市云和数据 编辑:程序博客网 时间:2024/05/21 14:02

前几天收到游戏中一个很严重的bug,执行某项操作的时候会出现卡死的现象。最后调试的时候定位到std的sort函数,发现一进这个函数就出不来了,很可能在里面出现了死循环。刚开始,我还是很诧异。大名鼎鼎,久经考验的的STL算法也会出现死循环?于是baidu了一下,果然在网上也发现不少人碰到过类似情况。出现死循环大多是由于在sort函数中的比较函数里面相等元素返回了true。

 

std的sort函数用的是QuickSort算法,采用分段递归排序。很可能是在递归的时候出现问题,导致无限递归循环。后来看到Effecitve STL 中第 21条: 永远让比较函数对相同元素返回false 不过也有一个更保险的方法就是使用stable_sort函数,这个函数是稳定排序算法,当两个元素相等的时候会保持次序。经验证,不管任何情况,该函数都不会引起死循环。不过该函数比起sort函数来开销会大一点。

0 0