func (s *Set) Init(unique bool, data interface{}, compare func(a, b interface{}) int) {
	s.tree.Init(unique, data, nil, compare)
}
Init init the set, function NewSet and NewMultiSet will calle it,
only the first call of this function will have an affect on set
package rbtree
import (
	"unsafe"
)
type SetNode struct {
	n _node
}
func (n SetNode) GetData() interface{} {
	return n.n.tree.getKey(n.n.node)
}
func (n SetNode) Next() SetNode {
	return SetNode{n.n.Next()}
}
func (n SetNode) Last() SetNode {
	return SetNode{n.n.Last()}
}
func (n SetNode) GetSet() *Set {
	return (*Set)(unsafe.Pointer(n.n.tree))
}
type Set struct {
	tree
}
func NewSet(data interface{}, compare func(a, b interface{}) int) *Set {
	var s = &Set{}
	s.Init(true, data, compare)
	return s
}
func NewMultiSet(data interface{}, compare func(a, b interface{}) int) *Set {
	var s = &Set{}
	s.Init(false, data, compare)
	return s
}
func (s *Set) pack(n _node) SetNode {
	return SetNode{n: n}
}