문제

나는 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_boundlower_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 컨테이너는 운영자< 와 연산자==.내가 찾는 그것의 모범 사례를 구현하는 그들 모두.

물론,질문에도 대답이 더 완전히 구현하여 비교 함수의 지도에서,그 자체에 의존하지 않습니다.이것은 종종 좋은 방법이 구현하는 다른 방법으로 호출 찾을 수 있습니다()습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top