2012-01-11 7 views
2

ヒープの詳細については、独自のMaxHeapクラスを実装しました。私はそれをテストし、それは正常に動作しています。今、私はMinHeapを作成したいと思います。 2つの異なるもの(MaxHeapとMinHeap)が異なるのは、比較だけです(つまり、<を> =に変更する)。だから私はどのように私のクラスを両方の方法で動作するように再設計できますか?私の頭に浮かぶのは、オブジェクトの作成中に比較関数を渡すことです。それが最善の方法ですか?もしそうなら、私はそれをどうやってやるの?私は、私が探しているものを検索するための適切なキーワードを知らない。そのようなクラスのデザインを説明し、いくつかのチュートリアルを教えてください。ありがとう!コンパレータを受け入れるクラスを作成する方法(最大ヒープと最小ヒープの場合)?

+0

'> ='は厳密な弱い順序ではありません。 –

答えて

4

標準ライブラリがするようですかとコンパレータにテンプレート引数を作る:

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

その後、あなたはcompare(a, b)を使用し、二つの要素abを比較する必要がある場合。

通常の<の順序付けされた型をインスタンス化するには、何かをMyHeap<int>とします。逆順を使用するには、MyHeap<double, std::greater<double>>とします。その他

余分なメンバーオブジェクトについて心配する必要はありません。空のベースクラスの最適化では、ステートレスコンパレータのためのコストはかかりません。

+0

私はそれを実装し、それは完全に働いた。ありがとう! – Vinay

関連する問題