0

単純なバイナリ最小ヒープを作成しています。バイナリヒープがどのように機能するかは明らかであり、それらの実装は問題ではありません。ただし、比較したいメンバーを持つオブジェクト(int / float / doublesなどではなく)をツリーに格納したいので、ジェネリックバイナリヒープ(この場合は最小ヒープ)を実装する方法に問題があります。オブジェクトを上下にバブリングするため。

そのようなことに対する解決策はありますか?

4

1 に答える 1

1

はい、Tのジェネリックタイプをに制限する必要がありますIComparable<T>

例えば:

public sealed class BinaryMinHeap<T> where T: IComparable<T>
{
    ...

次に、タイプTの要素を比較します。

if (element.CompareTo(otherThing) > 0)
    ...

(CompareTo()からの戻り値の符号が、要素の順序を示している場合。)

intdoubleなどの組み込み型はstringすべて実装されIComparable<T>ているため、このアプローチはそれらでも機能します。

Comparison<T>または、要素を比較するときに使用するデリゲートを渡すこともできます。その場合、タイプTはを実装する必要はありませんIComparable<T>

を使用するものの例についてはComparison<T>、を参照してくださいArray.Sort<T>()

于 2013-02-27T12:10:58.137 に答える