On this page
heapqueue
The heapqueue module implements a heap data structure that can be used as a priority queue. Heaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for all k, counting elements from 0. The interesting property of a heap is that a[0] is always its smallest element.
Basic usage
Example:
var heap = initHeapQueue[int]()
heap.push(8)
heap.push(2)
heap.push(5)
# The first element is the lowest element
assert heap[0] == 2
# Remove and return the lowest element
assert heap.pop() == 2
# The lowest element remaining is 5
assert heap[0] == 5
  Usage with custom object
To use a HeapQueue with a custom object, the < operator must be implemented.
Example:
type Job = object
  priority: int
proc `<`(a, b: Job): bool = a.priority < b.priority
var jobs = initHeapQueue[Job]()
jobs.push(Job(priority: 1))
jobs.push(Job(priority: 2))
assert jobs[0].priority == 1
  Imports
Types
Procs
- 
    
proc initHeapQueue[T](): HeapQueue[T] - 
    
Creates a new empty heap.
See also:
Source Edit - 
    
proc len[T](heap: HeapQueue[T]): int {...}{.inline.} - 
    Returns the number of elements of 
heap. Source Edit - 
    
proc `[]`[T](heap: HeapQueue[T]; i: Natural): lent T {...}{.inline.} - 
    Accesses the i-th element of 
heap. Source Edit - 
    
proc push[T](heap: var HeapQueue[T]; item: sink T) - 
    Pushes 
itemonto heap, maintaining the heap invariant. Source Edit - 
    
proc toHeapQueue[T](x: openArray[T]): HeapQueue[T] - 
    
Creates a new HeapQueue that contains the elements of
x.See also:
Example:
Source Editvar heap = toHeapQueue([9, 5, 8]) assert heap.pop() == 5 assert heap[0] == 8 - 
    
proc pop[T](heap: var HeapQueue[T]): T - 
    Pops and returns the smallest item from 
heap, maintaining the heap invariant.Example:
Source Editvar heap = toHeapQueue([9, 5, 8]) assert heap.pop() == 5 - 
    
proc find[T](heap: HeapQueue[T]; x: T): int - 
    Linear scan to find index of item 
xor -1 if not found.Example:
Source Editvar heap = toHeapQueue([9, 5, 8]) assert heap.find(5) == 0 assert heap.find(9) == 1 assert heap.find(777) == -1 - 
    
proc del[T](heap: var HeapQueue[T]; index: Natural) - 
    Removes the element at 
indexfromheap, maintaining the heap invariant.Example:
Source Editvar heap = toHeapQueue([9, 5, 8]) heap.del(1) assert heap[0] == 5 assert heap[1] == 8 - 
    
proc replace[T](heap: var HeapQueue[T]; item: sink T): T - 
    Pops and returns the current smallest value, and add the new item. This is more efficient than pop() followed by push(), and can be more appropriate when using a fixed-size heap. Note that the value returned may be larger than item! That constrains reasonable uses of this routine unless written as part of a conditional replacement: 
    
Example:
Source Editvar heap = initHeapQueue[int]() heap.push(5) heap.push(12) assert heap.replace(6) == 5 assert heap.len == 2 assert heap[0] == 6 assert heap.replace(4) == 6 - 
    
proc pushpop[T](heap: var HeapQueue[T]; item: sink T): T - 
    Fast version of a push followed by a pop. 
    
Example:
Source Editvar heap = initHeapQueue[int]() heap.push(5) heap.push(12) assert heap.pushpop(6) == 5 assert heap.len == 2 assert heap[0] == 6 assert heap.pushpop(4) == 4 - 
    
proc clear[T](heap: var HeapQueue[T]) - 
    Removes all elements from 
heap, making it empty.Example:
Source Editvar heap = initHeapQueue[int]() heap.push(1) heap.clear() assert heap.len == 0 - 
    
proc `$`[T](heap: HeapQueue[T]): string - 
    Turns a heap into its string representation. 
    
Example:
Source Editvar heap = initHeapQueue[int]() heap.push(1) heap.push(2) assert $heap == "[1, 2]" 
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
 https://nim-lang.org/docs/heapqueue.html