44 lines
870 B
Go
44 lines
870 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"container/heap"
|
|
)
|
|
|
|
type Task struct {
|
|
priority int
|
|
name string
|
|
}
|
|
|
|
type TaskPQ []Task
|
|
|
|
func (self TaskPQ) Len() int { return len(self) }
|
|
func (self TaskPQ) Less(i, j int) bool {
|
|
return self[i].priority < self[j].priority
|
|
}
|
|
func (self TaskPQ) Swap(i, j int) { self[i], self[j] = self[j], self[i] }
|
|
func (self *TaskPQ) Push(x interface{}) { *self = append(*self, x.(Task)) }
|
|
func (self *TaskPQ) Pop() (popped interface{}) {
|
|
popped = (*self)[len(*self)-1]
|
|
*self = (*self)[:len(*self)-1]
|
|
return
|
|
}
|
|
|
|
func main() {
|
|
pq := &TaskPQ{{3, "Clear drains"},
|
|
{4, "Feed cat"},
|
|
{5, "Make tea"},
|
|
{1, "Solve RC tasks"}}
|
|
|
|
// heapify
|
|
heap.Init(pq)
|
|
|
|
// enqueue
|
|
heap.Push(pq, Task{2, "Tax return"})
|
|
|
|
for pq.Len() != 0 {
|
|
// dequeue
|
|
fmt.Println(heap.Pop(pq))
|
|
}
|
|
}
|