2011-10-07 47 views
-1

我的问题与this有关,因为我解决了这个问题,我写了自己的排序算法(简单的插入排序),并且它可以工作。我对此非常惊讶,因为我认为标准库经过了充分测试。是否有任何已知的特殊情况,std::sort可能会搞砸?std :: sort可能导致错误吗?

+0

如果你的比较器不是自洽的,那么你可能会遇到麻烦。 –

+0

你是什么意思的自我一致? – Sim

+1

如果使用(a,b)和(b,a)调用比较器时没有给出一致的答案,则可能会遇到麻烦。如果(a,b)返回true,则(b,a)最好返回false。 –

回答

6

不,在任何常见的C++标准库实现std::sort中都不存在任何已知的错误。它经过严格测试。

如果您看到崩溃或不正确的结果,那几乎肯定是因为您没有遵守合同:要么您传递了无效参数,要么您的比较器不遵守strict weak ordering(不反射,不对称,传递性,等价性的传递性)。

1

如果您的比较函数/对象没有遵循严格的弱排序,或者您正在排序的对象包含不再有效的指针,则这两者中的任何一个都可能导致它断开。

+0

以及我的算法也不容忍nullpointer,所以唯一的可能性可能是第二种情况,但我不知道什么是'自我一致'的意思 – Sim

+0

@Sim:它不应该是可能的'a UncleBens