我正在创建一个简单的二进制最小堆。我很清楚二进制堆是如何工作的,实现它们不是问题。但是,考虑到我想在我的树中存储我想要比较的成员的对象(而不是整数/浮点数/双精度/等),我在如何实现通用二进制堆(在这种情况下为最小堆)时遇到了麻烦为了使物体向上或向下起泡。
这样的事情有什么解决办法吗?
我正在创建一个简单的二进制最小堆。我很清楚二进制堆是如何工作的,实现它们不是问题。但是,考虑到我想在我的树中存储我想要比较的成员的对象(而不是整数/浮点数/双精度/等),我在如何实现通用二进制堆(在这种情况下为最小堆)时遇到了麻烦为了使物体向上或向下起泡。
这样的事情有什么解决办法吗?
是的,您只需要将 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>()
。