単純なバイナリ最小ヒープを作成しています。バイナリヒープがどのように機能するかは明らかであり、それらの実装は問題ではありません。ただし、比較したいメンバーを持つオブジェクト(int / float / doublesなどではなく)をツリーに格納したいので、ジェネリックバイナリヒープ(この場合は最小ヒープ)を実装する方法に問題があります。オブジェクトを上下にバブリングするため。
そのようなことに対する解決策はありますか?
単純なバイナリ最小ヒープを作成しています。バイナリヒープがどのように機能するかは明らかであり、それらの実装は問題ではありません。ただし、比較したいメンバーを持つオブジェクト(int / float / doublesなどではなく)をツリーに格納したいので、ジェネリックバイナリヒープ(この場合は最小ヒープ)を実装する方法に問題があります。オブジェクトを上下にバブリングするため。
そのようなことに対する解決策はありますか?
はい、Tのジェネリックタイプをに制限する必要がありますIComparable<T>
。
例えば:
public sealed class BinaryMinHeap<T> where T: IComparable<T>
{
...
次に、タイプTの要素を比較します。
if (element.CompareTo(otherThing) > 0)
...
(CompareTo()からの戻り値の符号が、要素の順序を示している場合。)
int
、double
などの組み込み型はstring
すべて実装されIComparable<T>
ているため、このアプローチはそれらでも機能します。
Comparison<T>
または、要素を比較するときに使用するデリゲートを渡すこともできます。その場合、タイプTはを実装する必要はありませんIComparable<T>
。
を使用するものの例についてはComparison<T>
、を参照してくださいArray.Sort<T>()
。