我正在尝试实现一个简单的基于数组的堆,但遇到了嵌套 Node 类的问题。我希望我的节点具有可比性,但是,编译器提示节点类不符合。
导入基金会
class Heap<E:Comparable> {
var heap = Array<Node<E>>()
init() { }
class Node<E:Comparable >:Comparable {
var key:E!
init(key:E) { self.key = key }
}
func < <E> (lhs:Heap<E>.Node<E>, rhs:Heap<E>.Node<E>) -> Bool {
return lhs.key < rhs.key }
func == <E> (lhs:Heap<E>.Node<E>, rhs:Heap<E>.Node<E>) -> Bool {
return lhs.key == rhs.key }
最佳答案
它提示是因为 Node
类不符合 Comparable
协议(protocol)。
protocol Comparable : _Comparable, Equatable {
func <=(lhs: Self, rhs: Self) -> Bool
func >=(lhs: Self, rhs: Self) -> Bool
func >(lhs: Self, rhs: Self) -> Bool
}
还有一件事,如果你想使用self.key
进行比较,那么类型也应该符合Comparable
协议(protocol)。这是示例:
class Node<E where E:Comparable>:Comparable {
var key:E!
init(key:E) { self.key = key }
}
func ==<E>(lhs: Node<E>, rhs: Node<E>) -> Bool {
return lhs.key == rhs.key
}
func <<E>(lhs: Node<E>, rhs: Node<E>) -> Bool {
return lhs.key < rhs.key
}
关于swift - 嵌套的 Swift 类不符合 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302218/