2010-08-05 4 views

답변

5

모든 유형의 그것만큼 중요한로 사용할 수 있습니다 효율적인 색인에 관심이 있다면

이다

  • 복사 가능 맵이 키
,617으로 분류되기 때문에,
  • 대등
  • 지정 가능

    클래스가 단순한 구조이면 이미 복사 및 할당이 가능합니다. 클래스를 비교할 수 있으려면 operator<을 구현하거나 대신 사용자 정의 비교 함수를 사용하여 맵을 만들어 사용해야합니다.

    시간 효율성에 대한 유일한 영향은 복사 및 비교하는 데 더 오래 걸리는 대형 물체 때문입니다. 객체가 그 크기 일 필요가 있다면, 그 일에 관해 할 수있는 일은 아무것도 없으므로 걱정할 필요가 없습니다.

  • +1

    또한 유형에 대해'std :: less'를 전문화 할 수 있습니다. – sbi

    2

    클래스는이 operator< (또는 그렇지 않으면이 독립 인수 식 으로든 등이 개 이러한 경우를 받아 들일 수 operator<을 정의하여 예, 그 인스턴스가 < -comparable하게 가지고있는 한 - 다시, 또는 당신이 만드는 명시 적 비교 개체가있는지도), 제대로 작동합니다. 물론 해당 연산자 또는 함수 (및 복사 생성자와 같은 중요한 비트)가있는 경우에만 속도가 빠릅니다.

    편집는 : - 포인팅을위한 @Neil하는 TX (즉 당신이 명시 적으로 비교 대상을 제공하는 대신 사용할 거라면) operator<는 운영자가 될 필요는 없지만, 별도의 함수가 될 수 있다는 여분의 비트를 추가 이 코멘트에.

    +4

    클래스에 연산자가 있어야 할 필요는 없습니다. <- 단순히 비교할 필요가없는 것이어야합니다. 이것은 자유 함수를 통해 구현 될 수 있습니다. –

    +0

    @Neil, 우수 포인트 - 수정 수정, tx. –

    +0

    std :: map 은 std :: less 을 사용합니다. 당신은 또한 그것을 전문화 할 수 있습니다. – MSalters

    1

    예,보다 작음 연산자 <을 구현하거나 맵 정의에서 비교 특성을 제공하는 한 모든 클래스를 키로 사용할 수 있습니다.

    실제로 문제가되지 않는 한 시간에 대해서는 걱정하지 마십시오.

    1

    키에 사용자 정의 클래스를 사용하는 것과 관련하여 Map이 정의 된 방식으로 인해 클래스에 '미만'연산자 (연산자 <)를 정의하거나지도를 작성할 때 비교 객체를 제공해야합니다. Here은 후자의 예입니다.

    효율성에 관해서는 조심스럽게 걱정하지 마십시오. 그러나 중요한 문제는 키 객체의 사본을 만드는 것이 얼마나 큰지입니다.

    효율성과 관련이 없지만지도에있는 동안 운영자 <의 결과에 영향을 미치는 방식으로 키의 내용을 변경하지 마십시오. 당신은 키의 다른 구성 요소 (당신이 '여러 데이터'라고하기 때문에, boost::multi_index 봐.

    2

    맵의 키 유형으로 사용할 유형은 std::less<T> 특수화 또는 맵에 전달 된 다른 기본값 (std::less 대신)을 필요로합니다.std::less의 기본 구현은 <을 사용합니다. 그래서 당신은 당신의 유형에 대한

    1. 과부하 operator<()
    2. std::map로는
    3. 패스 다른 술어에 대한 std::less를 전문으로 할 수 있습니다.
    관련 문제