我正在尝试衡量各种搜索算法使用的比较数量。
我的代码相当简单 - 给定一个对象向量,然后我调用
std::sort(students.begin(), students.end());
我在我的Student
类中实现了一个比较运算符,如下所示:
bool Student::operator < (Student s) const {
compareCount++;
return number < s.getNumber();
}
其中compareCount
是一个静态变量。但是,我的结果令人费解。
为什么std::sort
需要对两个元素列表进行两次比较?这让我觉得我的代码的某些部分是不正确的。
答案 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);
}