container/heap
パッケージを使用して優先度キューを実装しました。一つの事は私を悩ます。ヒープが空の場合、interface.Pop()
メソッドの動作はどのようにする必要がありますか?私は、ドキュメントに記載された何も表示されませんし、ソースコードは、このような状況を期待していないようです:空のヒープ上のコンテナ/ヒープPop()
// Pop removes the minimum element (according to Less) from the heap
// and returns it. The complexity is O(log(n)) where n = h.Len().
// It is equivalent to Remove(h, 0).
//
func Pop(h Interface) interface{} {
n := h.Len() - 1
h.Swap(0, n)
down(h, 0, n)
return h.Pop()
}
明らかに、h.Len()
はこれがうまく動作するつもりはない0
ある場合。これは単にpanic
を意味するのでしょうか、またはユーザーにはアイテムが残っているかどうか常に確認されますか?
これはあなた次第です。 nilを返すことも、パニックを返すこともできます。 (私は、それがパニックになるのが適切だと言うよりも、ユーザに無限の戻り値を与えるよりも) – JimB
深くなってメソッドh.Swap()とdown()をチェックし、それらが限界をチェックする –
@YandryPozo - 'if j1> = n || j1 <0 {// j1 <0 int overflowの後に '私はこれは少し異なると思う。そして 'h.Swap()'は基本的な 'sort.Interface'によって実装されています。 –