英文:
How do I hide the heap methods from the user when writing a priority queue?
问题
我正在按照这个代码来实现一个优先队列。我不喜欢的是,在主方法中使用它时,用户必须调用heap.Push和heap.Pop。对我来说,让我的优先队列包含一个堆,而不是将其包装在一个堆中,会更有意义。我对此的想法是错误的吗?还是示例代码展示了在Golang中正确的做法?
英文:
I'm following this code to implement a priority queue. The thing I don't like is that when using it in the main method, the user has to call heap.Push and heap.Pop. It would make more sense to me to have my Priority queue contain a heap, rather than wrapping it in a heap. Am I thinking about this wrong, or does the example code show the right way to do it in Golang?
答案1
得分: 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)
}
请注意,这是一个示例代码,其中使用了container/heap
包中的函数。
英文:
I created a wrapper class which calls heap.Push and 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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论