module MakeFull (
X
:
KEY
)
: S
with type key = X.t
Use the custom X.weight
function
type
key
type +'a
t
val empty : 'a t
val is_empty : 'a t -> bool
val singleton : key -> 'a -> 'a t
val mem : key -> 'a t -> bool
val get : key -> 'a t -> 'a option
val get_exn : key -> 'a t -> 'a
Raises Not_found
if the key is not present
val nth : int -> 'a t -> (key * 'a) option
nth i m
returns the i
-th key, value
in the ascending
order. Complexity is O(log (cardinal m))
val nth_exn : int -> 'a t -> key * 'a
Raises Not_found
if the index is invalid
val get_rank : key -> 'a t -> [ `After of int | `At of int | `First ]
get_rank k m
looks for the rank of k
in m
, i.e. the index
of k
in the sorted list of bindings of m
.
let (`At n) = get_rank k m in nth_exn n m = get m k
should hold.
Since 1.4
val add : key -> 'a -> 'a t -> 'a t
val remove : key -> 'a t -> 'a t
val update : key ->
('a option -> 'a option) -> 'a t -> 'a t
update k f m
calls f (Some v)
if get k m = Some v
, f None
otherwise. Then, if f
returns Some v'
it binds k
to v'
,
if f
returns None
it removes k
val cardinal : 'a t -> int
val weight : 'a t -> int
val fold : f:('b -> key -> 'a -> 'b) -> x:'b -> 'a t -> 'b
val mapi : f:(key -> 'a -> 'b) -> 'a t -> 'b t
Map values, giving both key and value. Will use WORD.of_list
to rebuild keys.
Since 0.17
val map : f:('a -> 'b) -> 'a t -> 'b t
Map values, giving only the value.
Since 0.17
val iter : f:(key -> 'a -> unit) -> 'a t -> unit
val split : key ->
'a t -> 'a t * 'a option * 'a t
split k t
returns l, o, r
where l
is the part of the map
with keys smaller than k
, r
has keys bigger than k
,
and o = Some v
if k, v
belonged to the map
val merge : f:(key -> 'a option -> 'b option -> 'c option) ->
'a t -> 'b t -> 'c t
Similar to Map.S.merge
: 'a t -> key * 'a * 'a t
extract_min m
returns k, v, m'
where k,v
is the pair with the
smallest key in m
, and m'
does not contain k
.
Raises Not_found
if the map is empty
: 'a t -> key * 'a * 'a t
extract_max m
returns k, v, m'
where k,v
is the pair with the
highest key in m
, and m'
does not contain k
.
Raises Not_found
if the map is empty
val choose : 'a t -> (key * 'a) option
val choose_exn : 'a t -> key * 'a
Raises Not_found
if the tree is empty
val random_choose : Random.State.t -> 'a t -> key * 'a
Randomly choose a (key,value) pair within the tree, using weights
as probability weights
Raises Not_found
if the tree is empty
val add_list : 'a t -> (key * 'a) list -> 'a t
val of_list : (key * 'a) list -> 'a t
val to_list : 'a t -> (key * 'a) list
val add_seq : 'a t -> (key * 'a) CCWBTree.sequence -> 'a t
val of_seq : (key * 'a) CCWBTree.sequence -> 'a t
val to_seq : 'a t -> (key * 'a) CCWBTree.sequence
val add_gen : 'a t -> (key * 'a) CCWBTree.gen -> 'a t
val of_gen : (key * 'a) CCWBTree.gen -> 'a t
val to_gen : 'a t -> (key * 'a) CCWBTree.gen
val print : key CCWBTree.printer ->
'a CCWBTree.printer -> 'a t CCWBTree.printer