如何:通用二进制最小堆比较成员对象
本文关键字:比较 成员对象 二进制 如何 | 更新日期: 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
, double
和string
都实现了IComparable<T>
,所以这种方法也适用于它们。
或者,您可以传入Comparison<T>
委托,以便在比较元素时使用。那么类型T就不必实现IComparable<T>
了。
使用Comparison<T>
的例子见Array.Sort<T>()