# Module Heap.Removable

    module Removable: sig .. end

Removable augments a heap with the ability to remove elements from the heap in lg(n) (amortized) time at any point after they have been added. Elements within a Removable heap consume 4 words more memory and all heap operations will be somewhat slower.

    include Heap_intf.S

    module Elt: sig .. end

    val add_removable : 'a t -> 'a -> 'a Elt.t

`add_removable t v` adds `v` to `t`, returning a token that can be used to delete `v` from `t` in lg(n) amortized time.

    val remove : 'a t -> 'a Elt.t -> unit

If `t` and `token` are mismatched then behavior is undefined. `remove` may safely be called on a token more than once. This doesn't free all the memory associated with the Elt until some number of `pop` operations later -- see Heap_intf for details.

    val update : 'a t -> 'a Elt.t -> 'a -> 'a Elt.t

`update t token v` is shorthand for `remove t token; add_removable t v`

    val find_elt : 'a t -> f:('a -> bool) -> 'a Elt.t option

`find_elt t ~f`. If `f` is true for some element in `t`, return a `Elt.t` for that element. This operation is O(n).