我正在创建一个简单的二进制最小堆。我很清楚Binary堆如何工作并实现它们不是问题。但是我在如何实现通用二进制堆(在这种情况下是一个最小堆)上遇到麻烦,因为我想在我的树中存储具有我想要比较的成员的对象(而不是ints / floats / double / etc等)为了向上或向下起泡物体。
这样的事情有什么办法吗?
答案 0 :(得分:1)
是的,您只需要将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>()
。