# Functor Hash_heap.Make

    module Make: functor (Key : Key) -> sig .. end

Parameters:

`Key` | : | `Key`

    module Key: Key

    type 'a t = {

`` | `heap : `(Key.t * 'a) Heap.t`;`
`` | `cmp : `'a -> 'a -> int`;`
`` | `tbl : `(Key.t * 'a) Heap.Elt.t Table.t`;`

}

    val create : ?min_size:int -> ('a -> 'a -> int) -> 'a t

    val push : 'a t ->
           key:Table.key Hashtbl.key ->
           data:'a -> [> `Key_already_present | `Ok ]

    val push_exn : 'a t ->
           key:Table.key Hashtbl.key -> data:'a -> unit

    val replace : 'a t ->
           key:Table.key Hashtbl.key -> data:'a -> unit

    val remove : 'a t -> Table.key Hashtbl.key -> unit

    val mem : 'a t -> Table.key Hashtbl.key -> bool

    val top_with_key : 'a t -> (Key.t * 'a) option

    val top : 'a t -> 'a option

    val top_exn : 'a t -> 'a

    val top_with_key_exn : 'a t -> Key.t * 'a

    val pop_with_key_exn : 'a t -> Key.t * 'a

    val pop_with_key : 'a t -> (Key.t * 'a) option

    val pop : 'a t -> 'a option

    val pop_exn : 'a t -> 'a

    val pop_if_with_key : 'a t ->
           (key:Key.t -> data:'a -> bool) ->
           (Key.t * 'a) option

    val pop_if : 'a t -> ('a -> bool) -> 'a option

    val find : 'a t -> Table.key Hashtbl.key -> 'a option

    val find_exn : 'a t -> Table.key Hashtbl.key -> 'a

    val find_pop : 'a t -> Table.key Hashtbl.key -> 'a option

    val find_pop_exn : 'a t -> Table.key Hashtbl.key -> 'a

    val iter : 'a t ->
           f:(key:Key.t -> data:'a -> unit) -> unit

    val iter_vals : 'a t -> f:('a -> unit) -> unit

    val to_alist : 'a t -> (Key.t * 'a) list

    val length : 'a t -> int

    val copy : 'a t -> 'a t