根据这个链接stathat 使用与他们的treap重叠:
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]
相关分类