ヒープの詳細については、独自のMaxHeapクラスを実装しました。私はそれをテストし、それは正常に動作しています。今、私はMinHeapを作成したいと思います。 2つの異なるもの(MaxHeapとMinHeap)が異なるのは、比較だけです(つまり、<を> =に変更する)。だから私はどのように私のクラスを両方の方法で動作するように再設計できますか?私の頭に浮かぶのは、オブジェクトの作成中に比較関数を渡すことです。それが最善の方法ですか?もしそうなら、私はそれをどうやってやるの?私は、私が探しているものを検索するための適切なキーワードを知らない。そのようなクラスのデザインを説明し、いくつかのチュートリアルを教えてください。ありがとう!コンパレータを受け入れるクラスを作成する方法(最大ヒープと最小ヒープの場合)?
2
A
答えて
4
標準ライブラリがするようですかとコンパレータにテンプレート引数を作る:
template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
SWOComp compare;
public:
explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
// ...
};
その後、あなたはcompare(a, b)
を使用し、二つの要素a
とb
を比較する必要がある場合。
通常の<
の順序付けされた型をインスタンス化するには、何かをMyHeap<int>
とします。逆順を使用するには、MyHeap<double, std::greater<double>>
とします。その他
余分なメンバーオブジェクトについて心配する必要はありません。空のベースクラスの最適化では、ステートレスコンパレータのためのコストはかかりません。
+0
私はそれを実装し、それは完全に働いた。ありがとう! – Vinay
関連する問題
- 1. メジアンJavaの最大ヒープと最小ヒープ実装
- 2. 最小最大ヒープでの最大操作の削除
- 3. 最小ヒープを超える最大ヒープを使用するタイミングは?
- 4. このコードを最小ヒープから最大ヒープに変更するには
- 5. 最大ヒープでの挿入
- 6. 最小最大ヒープの最大要素の削除
- 7. 同じ要素を持つ最大と最小のヒープ
- 8. ヒープソート、使用する最小ヒープまたは最大?
- 9. 最小ヒープ抽出2最小要素
- 10. 最大ヒープの実装
- 11. Java最大のオブジェクトサイズ(ヒープ)
- 12. FibonacciHeapは最小ヒープですか? FibonacciHeapを使って最大値を見つける方法は?
- 13. 内部配列を再配置せずに最小ヒープから最大ヒープに切り替える
- 14. O(n)時間の複雑さで最小最大ヒープを構築する
- 15. ダイクストラアルゴリズム。最小優先度キューとしての最小ヒープ
- 16. ペアを保持する最小のヒープを作成する<int、custom class>
- 17. 「速度を最大にする」が「最小サイズ」でないヒープ問題
- 18. 最大ヒープの配列表現
- 19. 配列の最大ヒープ表現
- 20. 特定の最大ヒープ構造を与える入力を見つける方法
- 21. Objective-Cの最小/最大ヒープまたは優先順位キューのデータ構造
- 22. 配列が最小ヒープであるかどうかをチェックする方法?
- 23. フィールド名リストを受け入れるメソッドを作成する最善の方法
- 24. 最大限と最小限のDjango FloatFieldの作成方法は?
- 25. loadashで最小値と最大値を見つける方法
- 26. Elastic Beanstalk JVMヒープを検査する最良の方法
- 27. ユーザ入力の最小値と最大値を見つける
- 28. DAXで最大と最小の日付を作成する方法
- 29. ヒープソート - 昇順と降順の並べ替えに使用するヒープ(最小/最大)
- 30. 最大ヒープが正常に動作しません。
'> ='は厳密な弱い順序ではありません。 –