2014-03-18 49 views
1

我试图衡量各种搜索算法使用的比较数。 我的代码是相当简单 - 给定对象的矢量,然后我打电话 std::sort(students.begin(), students.end());执行std :: sort正确

我实现了一个比较运营商在我Student类,像这样:

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

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

enter image description here

为什么会std::sort需要两个比较的两个元素的列表?这使我认为我的代码的某些部分不正确。

+4

这不是很清楚是什么让你感到困惑的结果。 – lisyarus

+0

什么令人不解? – zneak

+0

请使用更大的尺寸进行实验。例如,10000,100000或1000000.8太小。 – timrau

回答

1

“为什么std :: sort要求两个元素列表的两个比较?” - 这是在“调试”模式下完成的吗?我使用Visual Studio 2005测试了这一点 - 它使用小数组插入排序(大小为< 32,否则它使用快速排序或堆排序)。在“释放”模式下,它进行一个比较。在调试模式下,它会检查提供呼叫者比较常规,以确保它的<与< =,所以有做了两个电话:

{ // 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); 
}