2013-02-27 60 views
0

我正在創建一個簡單的二進制最小堆。我很清楚Binary堆是如何工作的,並且實現它們不是問題。然而,我在如何實現一個通用Binary堆(在這種情況下是一個小堆)方面遇到了困難,因爲我想在我的樹中存儲對象(而不是ints/float/double/etc等),並且有我想要比較的成員以便向上或向下鼓泡物體。如何:通用二進制最小堆比較成員對象

有沒有解決這樣的事情?

回答

1

是的,你只需要將T的通用類型約束爲IComparable<T>

例如:

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

然後在那裏你比較你的T類型的元素,你這樣做:

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

(從哪兒的CompareTo()的返回值的符號告訴你的順序)

內置類型如int,doublestring全部實現IComparable<T>,所以這種方法也適用於他們。

或者,您可以傳入Comparison<T>代表以用於比較元素。然後,類型T將不必執行IComparable<T>

有關使用Comparison<T>的某些示例,請參見Array.Sort<T>()

+0

但我如何在if語句中進行比較?我不清楚如何指定要比較的成員/財產。 – Sidar 2013-02-27 12:32:10

+0

@Sidar:你會如何比較兩個int?我會選擇後一種解決方案('Comparison '或'IComparer '),以避免必須實現接口(並且它還允許您每次使用不同的屬性進行排序)。 – Groo 2013-02-27 12:34:29

+0

也許我沒有得到它。當然,比較整數是微不足道的。但在我的情況下,我必須指定一個成員/財產。這可能與我將分別存儲在我的樹中的不同對象有所不同。 – Sidar 2013-02-27 12:38:07