如何:通用二进制最小堆比较成员对象

本文关键字:比较 成员对象 二进制 如何 | 更新日期: 2023-09-27 18:01:18

我正在创建一个简单的二进制最小堆。我很清楚二进制堆是如何工作的,实现它们不是问题。然而,考虑到我想在我的树中存储对象(而不是int/float/double/etc),以便将对象向上或向下进行比较,我在如何实现通用二进制堆(在这种情况下是最小堆)方面遇到了麻烦。

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

如何:通用二进制最小堆比较成员对象

是的,您只需要将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>()