문제
나는 std::multimap 는 핵심은 사용자 지정 클래스입니다.무언가 이것을 좋아한다:
Class X {
public:
std::string s;
int x;
operator <(const X& other) const { return s < other.s; }
};
std::multimap<X, int> mymap;
지금,나는 사용하고 싶 upper_bound 및 lower_bound 를 통해 반복하는 모든 요소가 동일한 값으로"s".해야 합니까 일부를 구현한 다른 운영자는 X(예를 들어:==).나 그것이 제대로 작동이 단지 이것을 좋아하는가?
또한,나는 무엇을 해야 공급으로 인수 upper_bound 고 lower_bound?나는 가정을 만들어야 더미 객체는 원하는 값이"s"?
해결책
이 class X
은 키에 대한 multimap,매개변수 upper_bound()
/lower_bound()
해야의 유형이 있습니다.는 경우 class X
는 암시적으로 변환 std::string
(어떤 유형 X::s
다)다음을 사용할 수 있는 매개변수 upper_bound()
/lower_bound()
.
기본 비교를 위해 multimap 가 less<>
는 단순히 통화 operator <()
-그래서 그만 당신은 운영자는 필요에 class X
에 대한 multimap 작동합니다.
다른 팁
당신만을 제공해야 연산자==고 <.
upper_bound 및 lower_bound 은 다음과 같은 다른 어떤 발견 유형 방법,그래서 당신은 필요 같은 종류의 개체를 비교하는 경우,'더미'객체를 필요한 값 s.
편집:댓글은 올바른 해야 하는 연산자< 낮은/upper_bound 고 찾을 수 있습니다.하지만 당신이 원하는 경우 다른 메소드를 호출에 당신의 용기가 필요 연산자==니다.예를 들어.정렬하려는 경우()컨테이너,당신이 필요합니다==연산자.
2 개의 오버로드를 위해 필요한 모든 STL 컨테이너는 운영자< 와 연산자==.내가 찾는 그것의 모범 사례를 구현하는 그들 모두.
물론,질문에도 대답이 더 완전히 구현하여 비교 함수의 지도에서,그 자체에 의존하지 않습니다.이것은 종종 좋은 방법이 구현하는 다른 방법으로 호출 찾을 수 있습니다()습니다.