aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/container
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2014-05-15 13:58:13 -0700
committerRobert Griesemer <gri@golang.org>2014-05-15 13:58:13 -0700
commitb2d1a2b513cb9a7ceaa1eb6d097f1ef2a84637dd (patch)
tree2fbaaac23ff5ace0f6a9db47ef5640f1ed7e910d /src/pkg/container
parent7ad60b72831e10373e765775b213c11a46af16bc (diff)
downloadgo-b2d1a2b513cb9a7ceaa1eb6d097f1ef2a84637dd.tar.xz
container/heap: update example code
- use Init to establish heap invariant on a non-empty heap - use Fix to update heap after an element's properties have been changed (The old code used Init where it wasn't needed, and didn't use Fix because Fix was added after the example was written.) LGTM=bradfitz R=adonovan, bradfitz CC=golang-codereviews https://golang.org/cl/94520043
Diffstat (limited to 'src/pkg/container')
-rw-r--r--src/pkg/container/heap/example_pq_test.go22
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 8cbeb8d708..7017095cb8 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: