如何:通用二进制Min Heap比较成员对象

时间:2013-02-27 12:06:22

标签: c# generics mono binary-tree

我正在创建一个简单的二进制最小堆。我很清楚Binary堆如何工作并实现它们不是问题。但是我在如何实现通用二进制堆(在这种情况下是一个最小堆)上遇到麻烦,因为我想在我的树中存储具有我想要比较的成员的对象(而不是ints / floats / double / etc等)为了向上或向下起泡物体。

这样的事情有什么办法吗?

1 个答案:

答案 0 :(得分:1)

是的,您只需要将T的泛型类型约束为IComparable<T>

例如:

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

然后你在那里比较你的T类元素:

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

(来自CompareTo()的返回值的符号告诉您元素的顺序。)

intdoublestring等内置类型都实现了IComparable<T>,因此这种方法也适用于它们。

或者,您可以传入Comparison<T>委托,以便在比较元素时使用。然后类型T不必实现IComparable<T>

有关使用Comparison<T>的内容的示例,请参阅Array.Sort<T>()