【发布时间】:2021-12-04 04:38:11
【问题描述】:
我正在尝试实现一个通用的二进制最小堆。我有一个代表堆的 minHeap 类和一个代表节点的嵌套 Node 类。所以 minHeap 由 Node 对象组成。 Node 类有两个属性:一些通用数据和一个整数键。问题是,我一生都无法弄清楚如何比较两个 Node 类型的对象。我尝试在 Node 上实现 Icomparable,重载运算符:我无法让它工作。这是到目前为止的基本结构(我已经删除了不重要的部分):
'''
public class MinHeap<T>
{
static private int INITIAL_CAPACITY = 10;
private Node[] heap = new Node[INITIAL_CAPACITY];
private int heapSize = 0;
private int heapCapacity = INITIAL_CAPACITY;
private class Node
{
private T data;
private int key;
}
...
'''
我想要做的是重载运算符,例如 、==,以便能够比较 minHeap 类的方法中的节点。例如,当我在 minHeap 中插入一个新节点时,我需要将新节点的键与另一个节点的键进行比较。我怎样才能做到这一点?
【问题讨论】:
-
提示:如果您认为需要运算符重载,则可能不需要。
-
另外,不幸的是,C# 用于比较运算符重载的语法非常冗长(即它不会自动将它们映射到
IComparable实现*grumble*),也不会有一个宇宙飞船操作员。
标签: c# compare inner-classes