func (mit *MergeIterator) SeekFirst() {
	for _, it := range mit.iters {
		it.SeekFirst()
		if it.Valid() {
			n := it.GetNode()
			mit.h = append(mit.h, heapItem{iter: it, n: n})
		}
	}
	heap.Init(&mit.h)
	mit.Next()
}
SeekFirst moves cursor to the first item
package skiplist
import "container/heap"
import "unsafe"
type MergeIterator struct {
	iters []*Iterator
	h     nodeHeap
	curr  *Node
}
type heapItem struct {
	iter *Iterator
	n    *Node
}
type nodeHeap []heapItem
func (h nodeHeap) Len() int           { return len(h) }
func (h nodeHeap) Less(i, j int) bool { return h[i].iter.cmp(h[i].n.Item(), h[j].n.Item()) < 0 }
func (h nodeHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
func (h *nodeHeap) Push(x interface{}) {
	*h = append(*h, x.(heapItem))
}
func (h *nodeHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[0 : n-1]
	return x
}
func NewMergeIterator(iters []*Iterator) *MergeIterator {
	return &MergeIterator{
		iters: iters,
	}
}