diff options
Diffstat (limited to 'src/pkg/container/heap/example_pq_test.go')
-rw-r--r-- | src/pkg/container/heap/example_pq_test.go | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/pkg/container/heap/example_pq_test.go b/src/pkg/container/heap/example_pq_test.go index 8cbeb8d70..7017095cb 100644 --- a/src/pkg/container/heap/example_pq_test.go +++ b/src/pkg/container/heap/example_pq_test.go @@ -52,13 +52,12 @@ func (pq *PriorityQueue) Pop() interface{} { // update modifies the priority and value of an Item in the queue. func (pq *PriorityQueue) update(item *Item, value string, priority int) { - heap.Remove(pq, item.index) item.value = value item.priority = priority - heap.Push(pq, item) + heap.Fix(pq, item.index) } -// This example inserts some items into a PriorityQueue, manipulates an item, +// This example creates a PriorityQueue with some items, adds and manipulates an item, // and then removes the items in priority order. func Example_priorityQueue() { // Some items and their priorities. @@ -66,28 +65,31 @@ func Example_priorityQueue() { "banana": 3, "apple": 2, "pear": 4, } - // Create a priority queue and put the items in it. - pq := &PriorityQueue{} - heap.Init(pq) + // Create a priority queue, put the items in it, and + // establish the priority queue (heap) invariants. + pq := make(PriorityQueue, len(items)) + i := 0 for value, priority := range items { - item := &Item{ + pq[i] = &Item{ value: value, priority: priority, + index: i, } - heap.Push(pq, item) + i++ } + heap.Init(&pq) // Insert a new item and then modify its priority. item := &Item{ value: "orange", priority: 1, } - heap.Push(pq, item) + heap.Push(&pq, item) pq.update(item, item.value, 5) // Take the items out; they arrive in decreasing priority order. for pq.Len() > 0 { - item := heap.Pop(pq).(*Item) + item := heap.Pop(&pq).(*Item) fmt.Printf("%.2d:%s ", item.priority, item.value) } // Output: |