2012-01-11 1 views
2

힙에 대해 더 배우려면, 필자는 자체 MaxHeap 클래스를 구현했습니다. 나는 그것을 시험했으며 잘 작동한다. 이제 MinHeap을 만들고 싶습니다. 두 가지 (MaxHeap 및 MinHeap)에서 다를 수있는 유일한 것은 비교 일뿐입니다 (즉, <을> =로 변경). 그렇다면 어떻게하면 두 가지 방식으로 수업을 재 설계 할 수 있습니까? 내 마음에 오는 것은 객체를 만드는 동안 비교 함수를 전달하는 것입니다. 그게 최선의 방법인가요? 그렇다면 어떻게해야합니까? 나는 내가 찾고있는 것을 검색하기에 적합한 키워드를 모른다. 그런 수업의 디자인을 설명하고 튜토리얼을 가르쳐주세요. 감사!비교기를 허용하는 클래스를 만드는 방법 (최대 힙 및 최소 힙에 대해)?

+0

'> ='은 (는) 엄격한 약한 명령이 아닙니다. –

답변

4

표준 라이브러리처럼 수행 및 비교기에게 템플릿 인수하기 : 당신이 두 가지 요소 ab을 비교해야 할 때

template <typename T, typename SWOComp = std::less<T>> 
class MyHeap 
{ 
    SWOComp compare; 
public: 
    explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { } 
    // ... 
}; 

그런 다음, compare(a, b)을 사용합니다.

보통 < 정렬 형식을 인스턴스화하려면, 무엇인가 MyHeap<int>을 말하십시오. 역 순서를 사용하려면 MyHeap<double, std::greater<double>>라고 말하십시오. 기타 등등

추가 구성원 개체에 대해 걱정할 필요가 없습니다. 빈베이스 클래스 최적화를 사용하면 상태 비 저장 비교기에 비용이 들지 않습니다.

+0

나는 그것을 구현했고 완벽하게 작동했다. 감사! – Vinay

관련 문제