当编写优先队列时,如何隐藏堆方法不让用户看到?

huangapple go评论81阅读模式
英文:

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)
}

huangapple
  • 本文由 发表于 2016年12月19日 08:15:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/41214278.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定