2014-03-18 3 views
1

다양한 검색 알고리즘에서 사용하는 비교 수를 측정하려고합니다. 내 코드는 오히려 간단하다 - 나는 다음과 같이 내 Student 클래스 std::sort(students.begin(), students.end());std :: sort를 올바르게 구현하십시오.

내가 구현 가지고 비교 연산자를 호출 객체의 벡터 주어진 :

compareCount 정적 변수입니다
bool Student::operator < (Student s) const { 
    compareCount++; 
    return number < s.getNumber(); 
} 

. 그러나, 나의 결과는 의아해하고있다.

enter image description here

std::sort은 두 두 요소 목록을 비교 필요? 이 때문에 제 코드의 일부가 잘못되었다고 생각됩니다.

+4

그것은 결과에 당신이 혼란 무엇이 매우 명확하지가. – lisyarus

+0

수수께끼는 무엇입니까? – zneak

+0

실험용으로 훨씬 큰 크기를 사용하십시오. 예를 들어, 10000, 100000 또는 1000000. 8은 너무 작습니다. – timrau

답변

1

"왜 std :: sort는 두 요소 목록에 대해 두 개의 비교가 필요합니까?" -이 작업이 "디버그"모드에서 수행 되었습니까? Visual Studio 2005에서 작은 배열 (크기가 < 인 삽입 정렬을 사용합니다. 그렇지 않으면 빠른 정렬 또는 힙 정렬을 사용합니다). "릴리스"모드에서, 그것은 하나를 비교합니다. 디버그 모드에서는 공급 호출자가이 < < 대 =을 확실하게 루틴을 비교 확인, 그래서 만든 두 호출이 있습니다 :

{ // 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); 
} 
관련 문제