在编写优先级队列时如何隐藏用户的堆方法?

时间:2016-12-19 00:15:42

标签: go

我跟随this code实施优先级队列。我不喜欢的是,当在main方法中使用它时,用户必须调用heap.Push和heap.Pop。让我的优先级队列包含堆而不是将其包装在堆中对我来说更有意义。我在考虑这个错误,或者示例代码是否显示在Golang中执行此操作的正确方法?

1 个答案:

答案 0 :(得分:1)

我创建了一个包装类,它调用heap.Push和heap.Pop。

package huffman

import "container/heap"

type RunePriorityQueue struct {
    queue PriorityQueue
}

func (RunePriorityQueue) NewRunePriorityQueue() *RunePriorityQueue {
    newRPQ := new(RunePriorityQueue)
    heap.Init(&newRPQ.queue)
    return newRPQ
}

func (rpq *RunePriorityQueue) Push(item *Item) {
    heap.Push(&rpq.queue, item)
}

func (rpq *RunePriorityQueue) Pop() *Item {
    return heap.Pop(&rpq.queue).(*Item)
}