2014-03-18 80 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); 
}