2017-05-11 1 views
0

은 내가이 세트는 myClass가에 의해 정렬 할표준 : <myClass*> 설정이

std::set<myClass*> mySet; 

처럼 소트 세트, 객체에 대한 포인터의 집합이 할 수있는 가장 편리한 방법입니다 궁금 분류 :: someProperty (말하자면 int).

<을 myClass에 오버로드해야합니까? myClass 집합이 아니기 때문에 효과가 있을지 모르겠지만 포인터 집합입니다.

어떻게 비교 기능을 정의 할 수 있습니까?

대단히 감사합니다.

class myClass { 
    int value; 
public: 
    myClass(int i = 0) : value(i) {} 

    struct cmp { 
     bool operator()(myClass *const &a, myClass *const &b) const { 
      return a->value < b->value; 
     } 
    }; 
}; 

우리는 그들이 같은 설정 무언가를 정의

+1

속는 http://stackoverflow.com/questions/2620862/ custom-stdset-comparator를 사용하고 있습니까? – user508633

+1

@ user508633 : * 비슷한 *, 그러나 아주 속지 않습니다. –

답변

4

당신은 포인터를 역 참조하고이 일반 주문, 뭔가를 가리키는 개체의 특성을 비교하는 유형 (또는 함수)를 정의 할 필요가 이 :

std::set<myClass*, myClass::cmp> mySet; 

그러나 가능한 한 내 조언은 포인터 대신 개체를 저장하는 것입니다.

아래 주어 세트를 만드는 동안 다음 필요 비교기를 통과하지로서 또한 * 당신의 myClass가에 대한 표준 : 이하 전문 수
+0

고맙습니다. 제 경우에는 객체를 저장할 수 없습니다. –

3

:의

namespace std { 
template<> 
struct less<myClass*> 
{ 
    bool operator()(const myClass* k1, const myClass* k2) const 
    { 
     // Some code ... 
    } 
}; 
} 
관련 문제