正确实现std :: sort

时间:2014-03-18 17:43:33

标签: c++

我正在尝试衡量各种搜索算法使用的比较数量。 我的代码相当简单 - 给定一个对象向量,然后我调用 std::sort(students.begin(), students.end());

我在我的Student类中实现了一个比较运算符,如下所示:

bool Student::operator < (Student s) const {
    compareCount++;
    return number < s.getNumber();
}

其中compareCount是一个静态变量。但是,我的结果令人费解。

enter image description here

为什么std::sort需要对两个元素列表进行两次比较?这让我觉得我的代码的某些部分是不正确的。

1 个答案:

答案 0 :(得分:1)

&#34;为什么std :: sort需要对两个元素列表进行两次比较?&#34; - 这是在&#34;调试&#34;模式?我使用Visual Studio 2005进行了测试 - 它使用小数组的插入排序(大小<32,否则它使用快速排序或堆排序)。在&#34;发布&#34;模式,它做一个比较。在调试模式下,它会检查调用者提供的比较例程,以确保它具有&#0;&lt;与&lt; =,所以有两个电话:

{   // test if _Pred(_Left, _Right) and _Pred is strict weak ordering
if (!_Pred(_Left, _Right))
    return (false);
else if (_Pred(_Right, _Left))
    _DEBUG_ERROR2("invalid operator<", _Where, _Line);
return (true);
}