ocaml-containers/dev/containers/CCHeap/Make_from_compare/index.html
2023-02-15 17:36:59 +00:00

7 lines
No EOL
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Make_from_compare (containers.CCHeap.Make_from_compare)</title><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">containers</a> &#x00BB; <a href="../index.html">CCHeap</a> &#x00BB; Make_from_compare</nav><header class="odoc-preamble"><h1>Module <code><span>CCHeap.Make_from_compare</span></code></h1><p>A convenient version of <code>Make</code> that take a <code>TOTAL_ORD</code> instead of a partially ordered module. It allow to directly pass modules that implement <code>compare</code> without implementing <code>leq</code> explicitly</p></header><nav class="odoc-toc"><ul><li><a href="#parameters">Parameters</a></li><li><a href="#signature">Signature</a><ul><li><a href="#conversions">Conversions</a></li></ul></li></ul></nav><div class="odoc-content"><h2 id="parameters"><a href="#parameters" class="anchor"></a>Parameters</h2><div class="odoc-spec"><div class="spec parameter anchored" id="argument-1-E"><a href="#argument-1-E" class="anchor"></a><code><span><span class="keyword">module</span> </span><span><a href="argument-1-E/index.html">E</a></span><span> : <a href="../module-type-TOTAL_ORD/index.html">TOTAL_ORD</a></span></code></div></div><h2 id="signature"><a href="#signature" class="anchor"></a>Signature</h2><div class="odoc-spec"><div class="spec type anchored" id="type-elt"><a href="#type-elt" class="anchor"></a><code><span><span class="keyword">type</span> elt</span><span> = <a href="argument-1-E/index.html#type-t">E.t</a></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span><span class="keyword">val</span> empty : <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>empty</code> returns the empty heap.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_empty"><a href="#val-is_empty" class="anchor"></a><code><span><span class="keyword">val</span> is_empty : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p><code>is_empty h</code> returns <code>true</code> if the heap <code>h</code> is empty.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Empty"><a href="#exception-Empty" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Empty</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-merge"><a href="#val-merge" class="anchor"></a><code><span><span class="keyword">val</span> merge : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>merge h1 h2</code> merges the two heaps <code>h1</code> and <code>h2</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-insert"><a href="#val-insert" class="anchor"></a><code><span><span class="keyword">val</span> insert : <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>insert x h</code> inserts an element <code>x</code> into the heap <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add"><a href="#val-add" class="anchor"></a><code><span><span class="keyword">val</span> add : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>add h x</code> inserts an element <code>x</code> into the heap <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-filter"><a href="#val-filter" class="anchor"></a><code><span><span class="keyword">val</span> filter : <span><span>(<span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>filter p h</code> filters values, only retaining the ones that satisfy the predicate <code>p</code>. Linear time at least.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_min"><a href="#val-find_min" class="anchor"></a><code><span><span class="keyword">val</span> find_min : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> option</span></span></code></div><div class="spec-doc"><p><code>find_min h</code> find the minimal element of the heap <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-find_min_exn"><a href="#val-find_min_exn" class="anchor"></a><code><span><span class="keyword">val</span> find_min_exn : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-elt">elt</a></span></code></div><div class="spec-doc"><p><code>find_min_exn h</code> is like <a href="#val-find_min"><code>find_min</code></a> but can fail.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Empty</span> <p>if the heap is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take"><a href="#val-take" class="anchor"></a><code><span><span class="keyword">val</span> take : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span>(<a href="#type-t">t</a> * <a href="#type-elt">elt</a>)</span> option</span></span></code></div><div class="spec-doc"><p><code>take h</code> extracts and returns the minimum element, and the new heap (without this element), or <code>None</code> if the heap <code>h</code> is empty.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-take_exn"><a href="#val-take_exn" class="anchor"></a><code><span><span class="keyword">val</span> take_exn : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a> * <a href="#type-elt">elt</a></span></code></div><div class="spec-doc"><p><code>take_exn h</code> is like <a href="#val-take"><code>take</code></a>, but can fail.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Empty</span> <p>if the heap is empty.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-delete_one"><a href="#val-delete_one" class="anchor"></a><code><span><span class="keyword">val</span> delete_one : <span><span>(<span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>delete_one eq x h</code> uses <code>eq</code> to find one occurrence of a value <code>x</code> if it exist in the heap <code>h</code>, and delete it. If <code>h</code> do not contain <code>x</code> then it return <code>h</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-delete_all"><a href="#val-delete_all" class="anchor"></a><code><span><span class="keyword">val</span> delete_all : <span><span>(<span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> bool)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>delete_all eq x h</code> uses <code>eq</code> to find all <code>x</code> in <code>h</code> and delete them. If <code>h</code> do not contain <code>x</code> then it return <code>h</code>. The difference with <a href="#val-filter"><code>filter</code></a> is that <code>delete_all</code> stops as soon as it enters a subtree whose root is bigger than the element.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span><span class="keyword">val</span> iter : <span><span>(<span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>iter f h</code> iterates over the heap <code>h</code> invoking <code>f</code> with the current element.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fold"><a href="#val-fold" class="anchor"></a><code><span><span class="keyword">val</span> fold : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>fold f acc h</code> folds on all values of <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-size"><a href="#val-size" class="anchor"></a><code><span><span class="keyword">val</span> size : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> int</span></code></div><div class="spec-doc"><p><code>size h</code> is the number of elements in the heap <code>h</code>. Linear complexity.</p></div></div><h3 id="conversions"><a href="#conversions" class="anchor"></a>Conversions</h3><div class="odoc-spec"><div class="spec value anchored" id="val-to_list"><a href="#val-to_list" class="anchor"></a><code><span><span class="keyword">val</span> to_list : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> list</span></span></code></div><div class="spec-doc"><p><code>to_list h</code> returns the elements of the heap <code>h</code>, in no particular order.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_list_sorted"><a href="#val-to_list_sorted" class="anchor"></a><code><span><span class="keyword">val</span> to_list_sorted : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> list</span></span></code></div><div class="spec-doc"><p><code>to_list_sorted h</code> returns the elements of the heap <code>h</code> in increasing order.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 1.1</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_list"><a href="#val-add_list" class="anchor"></a><code><span><span class="keyword">val</span> add_list : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-elt">elt</a> list</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>add_list h l</code> adds the elements of the list <code>l</code> into the heap <code>h</code>. An element occurring several times will be added that many times to the heap.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_list"><a href="#val-of_list" class="anchor"></a><code><span><span class="keyword">val</span> of_list : <span><span><a href="#type-elt">elt</a> list</span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>of_list l</code> is <code>add_list empty l</code>. Complexity: <code>O(n log n)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_iter"><a href="#val-add_iter" class="anchor"></a><code><span><span class="keyword">val</span> add_iter : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-elt">elt</a> <a href="../index.html#type-iter">iter</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>add_iter h iter</code> is like <a href="#val-add_list"><code>add_list</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.8</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_seq"><a href="#val-add_seq" class="anchor"></a><code><span><span class="keyword">val</span> add_seq : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-elt">elt</a> <a href="../../../ocaml/Stdlib/Seq/index.html#type-t">Stdlib.Seq.t</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>add_seq h seq</code> is like <a href="#val-add_list"><code>add_list</code></a>. Renamed from <code>add_std_seq</code> since 3.0.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_iter"><a href="#val-of_iter" class="anchor"></a><code><span><span class="keyword">val</span> of_iter : <span><span><a href="#type-elt">elt</a> <a href="../index.html#type-iter">iter</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>of_iter iter</code> builds a heap from a given <code>iter</code>. Complexity: <code>O(n log n)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.8</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_seq"><a href="#val-of_seq" class="anchor"></a><code><span><span class="keyword">val</span> of_seq : <span><span><a href="#type-elt">elt</a> <a href="../../../ocaml/Stdlib/Seq/index.html#type-t">Stdlib.Seq.t</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>of_seq seq</code> builds a heap from a given <code>Seq.t</code>. Complexity: <code>O(n log n)</code>. Renamed from <code>of_seq</code> since 3.0.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_iter"><a href="#val-to_iter" class="anchor"></a><code><span><span class="keyword">val</span> to_iter : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../index.html#type-iter">iter</a></span></span></code></div><div class="spec-doc"><p><code>to_iter h</code> returns a <code>iter</code> of the elements of the heap <code>h</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.8</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_seq"><a href="#val-to_seq" class="anchor"></a><code><span><span class="keyword">val</span> to_seq : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../../../ocaml/Stdlib/Seq/index.html#type-t">Stdlib.Seq.t</a></span></span></code></div><div class="spec-doc"><p><code>to_seq h</code> returns a <code>Seq.t</code> of the elements of the heap <code>h</code>. Renamed from <code>to_std_seq</code> since 3.0.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_iter_sorted"><a href="#val-to_iter_sorted" class="anchor"></a><code><span><span class="keyword">val</span> to_iter_sorted : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../index.html#type-iter">iter</a></span></span></code></div><div class="spec-doc"><p><code>to_iter_sorted h</code> returns a <code>iter</code> by iterating on the elements of <code>h</code>, in increasing order.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.8</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_seq_sorted"><a href="#val-to_seq_sorted" class="anchor"></a><code><span><span class="keyword">val</span> to_seq_sorted : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../../../ocaml/Stdlib/Seq/index.html#type-t">Stdlib.Seq.t</a></span></span></code></div><div class="spec-doc"><p><code>to_seq_sorted h</code> returns a <code>Seq.t</code> by iterating on the elements of <code>h</code>, in increasing order. Renamed from <code>to_std_seq_sorted</code> since 3.0.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 3.0</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_gen"><a href="#val-add_gen" class="anchor"></a><code><span><span class="keyword">val</span> add_gen : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><a href="#type-elt">elt</a> <a href="../index.html#type-gen">gen</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>add_gen h gen</code> adds the gen <code>gen</code> to the heap <code>h</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_gen"><a href="#val-of_gen" class="anchor"></a><code><span><span class="keyword">val</span> of_gen : <span><span><a href="#type-elt">elt</a> <a href="../index.html#type-gen">gen</a></span> <span class="arrow">&#45;&gt;</span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>of_gen gen</code> builds a heap from a given <code>gen</code>. Complexity: <code>O(n log n)</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_gen"><a href="#val-to_gen" class="anchor"></a><code><span><span class="keyword">val</span> to_gen : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../index.html#type-gen">gen</a></span></span></code></div><div class="spec-doc"><p><code>to_gen h</code> returns a <code>gen</code> of the elements of the heap <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_tree"><a href="#val-to_tree" class="anchor"></a><code><span><span class="keyword">val</span> to_tree : <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-elt">elt</a> <a href="../index.html#type-ktree">ktree</a></span></span></code></div><div class="spec-doc"><p><code>to_tree h</code> returns a <code>ktree</code> of the elements of the heap <code>h</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-to_string"><a href="#val-to_string" class="anchor"></a><code><span><span class="keyword">val</span> to_string : <span>?sep:string <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><a href="#type-elt">elt</a> <span class="arrow">&#45;&gt;</span></span> string)</span> <span class="arrow">&#45;&gt;</span></span> <span><a href="#type-t">t</a> <span class="arrow">&#45;&gt;</span></span> string</span></code></div><div class="spec-doc"><p><code>to_string ?sep f h</code> prints the heap <code>h</code> in a string using <code>sep</code> as a given separator (default &quot;,&quot;) between each element (converted to a string using <code>f</code>).</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 2.7</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span><span class="keyword">val</span> pp :
<span>?pp_start:<span>unit <a href="../index.html#type-printer">printer</a></span> <span class="arrow">&#45;&gt;</span></span>
<span>?pp_stop:<span>unit <a href="../index.html#type-printer">printer</a></span> <span class="arrow">&#45;&gt;</span></span>
<span>?pp_sep:<span>unit <a href="../index.html#type-printer">printer</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><span><a href="#type-elt">elt</a> <a href="../index.html#type-printer">printer</a></span> <span class="arrow">&#45;&gt;</span></span>
<span><a href="#type-t">t</a> <a href="../index.html#type-printer">printer</a></span></span></code></div><div class="spec-doc"><p><code>pp ?pp_start ?pp_stop ?pp_sep ppf h</code> prints <code>h</code> on <code>ppf</code>. Each element is formatted with <code>ppf</code>, <code>pp_start</code> is called at the beginning, <code>pp_stop</code> is called at the end, <code>pp_sep</code> is called between each elements. By defaults <code>pp_start</code> and <code>pp_stop</code> does nothing and <code>pp_sep</code> defaults to (fun out -&gt; Format.fprintf out &quot;,@ &quot;). Renamed from <code>print</code> since 2.0</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div></div></body></html>