2014-10-24 2 views
0

데이터 구조, 세그먼트 트리, 힙 (우선 순위 큐)을 구현할 것입니다. 그러나 한 번만 쓰고 싶습니다. 객체를 비교하거나 함수를 비교하여 최대 힙 또는 최소 힙으로 설정할 수 있습니다 (과거에는 2 클래스를 작성해야했습니다).클래스 또는 개체 비교 함수를 전달하는 방법

문제는 개체를 비교하거나이 내가

struct heap{ 
SomeType comp; 

    void init(SomeType f){ 
    comp = f; 
    } 
... 
} 

을 수행 할 것입니다

수준의 기능에 기능을 비교하고 내가 비교할 때 사용하는 것이다 전달하는 방법입니다

comp(A, B); // << want it to return as bool 

내 구조체에 greater<int> 또는 less<pair<int, int> >과 같은 비교 개체를 어떻게 설정합니까?

만약 비교 대상이나 기능을 쓰고 싶다면 어떻게해야합니까?

내 나쁜 영어 죄송합니다. 감사합니다. 템플릿으로, 뭔가 다음과 같은

+1

'std :: function f'입니다. 그러나 '힙'을 비교 매개 변수가있는 템플릿으로 정의하는 것이 좋습니다. – user657267

답변

1

만들기 heap : 다음

template<typename SomeType, typename Compartor = std::less<SomeType> > 
struct heap 
{ 
    // .... 
}; 

할 수있다 :

heap<int, std::greater<int> > h; 

그렇지 않으면 당신은 할 수있는 당신의 heap 내부 std::function<bool(heap const& lhs , heap const& rhs)> func ; 와 멤버 함수에 인수로 func을 받아 외부 세계로부터.

+0

비교기를 사용하는 방법? 나는 'Comparator (x, y)'를 시도하고'error : std :: greater :: greater (int &, int &) '에 대한 호출에 대해 일치하는 함수를 반환하지 않는다. " –

+0

@ kill-z 먼저 Compartor comp; '그렇다면'comp()'를 사용할 수 있습니다. 모든 생성자 이니셜 라이저 목록에서'comp'를 초기화하도록 선택할 수도 있습니다. – P0W

+0

감사합니다. 잘 작동합니다. Comparator를'std :: max'로 설정하는 것은 어떻습니까? 'typename Compartor = std :: less '를'typename Compartor = std :: max '로 변경 하시겠습니까? 시도했지만 작동하지 않습니다. –

관련 문제