GoLLRB 很棒,您没有理由切换。我们认为 treaps 背后的想法是解决我们问题的优雅方案,因此我们实现了它。我们喜欢 GoLLRB 提供的接口,所以我们在实现中模仿了它。
我们添加到 treap 包中的一件事是允许您使用重叠函数进行迭代,例如,您可以获得 [3,9) 中的所有键。我们经常使用它,通常以结构作为键。
帕特里克
我正在使用以下代码,不知道如何继续:
package main
import(
"reflect"
"fmt"
"github.com/stathat/treap"
)
func IntLess(p, q interface{}) bool {
return p.(int) < q.(int)
}
func BucketOverlap(a, b interface{}) bool {
return false
}
func main() {
tree := treap.NewOverlapTree(IntLess, BucketOverlap)
tree.Insert(5, "a")
tree.Insert(7, "b")
tree.Insert(2, "c")
tree.Insert(1, "d")
for v := range tree.IterateOverlap([]int{2,5}) {
fmt.Printf("val: %v\n", v)
}
}
假设我想获得范围内的键[2,5]
=>[c,a]