2012-11-10 4 views
2

std :: map의 키 유형으로 자체 클래스를 사용합니다. 두 객체가 동등 할 때지도 구현이 어떻게 결정합니까?C++ STL map :: find()

요소를 배열하기 위해 연산자 < 또는 Comp 유형을 결정할 수 있음을 알고 있습니다. 그러나 나는 평등에 관해서 아무것도 찾을 수 없다.

+2

'! (a chris

+1

@chris 대답은 대답이 아닙니다 :) – dasblinkenlight

답변

4

operator<을 사용하여 비교를 할 수 있으므로 operator==을 정의 할 필요가 없습니다. 기본적으로 하나가 다른 하나보다 적지 않고 다른 하나가 첫 번째보다 작지 않으면 평등해야합니다. 객체가 동일한 경우

bool isEqual(const Type &arg1, const Type &arg2) const { 
    return !(arg1 < arg2) && !(arg2 < arg1); 
} 
4

std::map<K, V, Comp> 클래스가 실제로 확인하지 않습니다 : 이것은의 가능한 유틸리티 기능의 구현입니다! 두 개의 오브젝트가 Compo의 기본 정의, std::less<K> 즉, 클래스 어느 객체가 다른 것보다 작은 것으로 동등한 결정

Comp comp; 
if (!comp(a, b) && !comp(b, a)) { 
    // a and b are in the same equivalence class 
} 

하여 결정 동일한 등가 클래스에 속해있는 경우가 관심 모두이다.

+0

아, 나는 비교를 선택할 수 있다는 것을 잊어 버렸습니다. 그것은 항상 포함하는 것이 좋습니다. – chris