0

我正在创建一个简单的二进制最小堆。我很清楚二进制堆是如何工作的,实现它们不是问题。但是,考虑到我想在我的树中存储我想要比较的成员的对象(而不是整数/浮点数/双精度/等),我在如何实现通用二进制堆(在这种情况下为最小堆)时遇到了麻烦为了使物体向上或向下起泡。

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

4

1 回答 1

1

是的,您只需要将 T 的泛型类型限制为IComparable<T>.

例如:

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

然后你在哪里比较你的类型 T 你做的元素:

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

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

和所有的内置类型都实现了int,所以这种方法也适用于它们。doublestringIComparable<T>

或者,您可以传入一个Comparison<T>委托以在比较元素时使用。那么类型 T 就不必实现IComparable<T>.

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

于 2013-02-27T12:10:58.137 回答