douhuike3199 2019-02-21 14:56
浏览 174

GO中的优先队列

can anyone explain me this thing: I want implement priority queue in GO (interface implementation got from link, but for lowest)

My code:

pq := make(PriorityQueue, 0)

pq.Push(&Item{value: 0, priority: 0})

heap.Init(&pq)

fmt.Println(heap.Pop(&pq).(*Item))

item := &Item{value: 1, priority: 10}
pq.Push(item)
item = &Item{value: 2, priority: 20}
pq.Push(item)
item = &Item{value: 3, priority: 5}
pq.Push(item)

fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))

// Output:
&{0 0 -1}
&{1 10 -1}
&{3 5 -1}
&{2 20 -1}

Why it not outputs:

&{0 0 -1}
&{3 5 -1} 
...
  • 写回答

2条回答 默认 最新

  • duanjiongzhen2523 2019-02-21 15:04
    关注

    The way this particular priority queue is implemented, you should call heap.Init after you've pushed your items into the queue, as the original example demonstrates.

    pq := make(PriorityQueue, 0)
    
    pq.Push(&Item{value: "0", priority: 0, index: 0})
    item := &Item{value: "1", priority: 10, index: 1}
    pq.Push(item)
    item = &Item{value: "2", priority: 20, index: 2}
    pq.Push(item)
    item = &Item{value: "3", priority: 5, index: 3}
    pq.Push(item)
    
    heap.Init(&pq)
    
    fmt.Println(heap.Pop(&pq).(*Item))
    fmt.Println(heap.Pop(&pq).(*Item))
    fmt.Println(heap.Pop(&pq).(*Item))
    fmt.Println(heap.Pop(&pq).(*Item))
    

    Will print the items in priority order, as expected.

    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算