rnk_indices.html 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Boost.MultiIndex Documentation - Ranked indices reference</title>
  6. <link rel="stylesheet" href="../style.css" type="text/css">
  7. <link rel="start" href="../index.html">
  8. <link rel="prev" href="indices.html">
  9. <link rel="up" href="index.html">
  10. <link rel="next" href="hash_indices.html">
  11. </head>
  12. <body>
  13. <h1><img src="../../../../boost.png" alt="boost.png (6897 bytes)" align=
  14. "middle" width="277" height="86">Boost.MultiIndex Ranked indices reference</h1>
  15. <div class="prev_link"><a href="ord_indices.html"><img src="../prev.gif" alt="ordered_indices" border="0"><br>
  16. Ordered indices
  17. </a></div>
  18. <div class="up_link"><a href="index.html"><img src="../up.gif" alt="Boost.MultiIndex reference" border="0"><br>
  19. Boost.MultiIndex reference
  20. </a></div>
  21. <div class="next_link"><a href="hash_indices.html"><img src="../next.gif" alt="hashed indices" border="0"><br>
  22. Hashed indices
  23. </a></div><br clear="all" style="clear: all;">
  24. <hr>
  25. <h2>Contents</h2>
  26. <ul>
  27. <li><a href="#rnk_index_fwd_synopsis">Header
  28. <code>"boost/multi_index/ranked_index_fwd.hpp"</code> synopsis</a></li>
  29. <li><a href="#synopsis">Header
  30. <code>"boost/multi_index/ranked_index.hpp"</code> synopsis</a>
  31. <ul>
  32. <li><a href="#unique_non_unique">
  33. Index specifiers <code>ranked_unique</code> and <code>ranked_non_unique</code>
  34. </a></li>
  35. <li><a href="#rnk_indices">Ranked indices</a>
  36. <ul>
  37. <li><a href="#complexity_signature">Complexity signature</a></li>
  38. <li><a href="#instantiation_types">Instantiation types</a></li>
  39. <li><a href="#rank_operations">Rank operations</a></li>
  40. <li><a href="#serialization">Serialization</a></li>
  41. </ul>
  42. </li>
  43. </ul>
  44. </li>
  45. </ul>
  46. <h2>
  47. <a name="rnk_index_fwd_synopsis">Header
  48. <a href="../../../../boost/multi_index/ranked_index_fwd.hpp">
  49. <code>"boost/multi_index/ranked_index_fwd.hpp"</code></a> synopsis</a></h2>
  50. <blockquote><pre>
  51. <span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
  52. <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
  53. <span class=comment>// index specifiers ranked_unique and ranked_non_unique</span>
  54. <span class=keyword>template</span><span class=special>&lt;</span><b>consult ranked_unique reference for arguments</b><span class=special>&gt;</span>
  55. <span class=keyword>struct</span> <span class=identifier>ranked_unique</span><span class=special>;</span>
  56. <span class=keyword>template</span><span class=special>&lt;</span><b>consult ranked_non_unique reference for arguments</b><span class=special>&gt;</span>
  57. <span class=keyword>struct</span> <span class=identifier>ranked_non_unique</span><span class=special>;</span>
  58. <span class=comment>// indices</span>
  59. <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
  60. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span> <span class=keyword>class</span> <b>index name is implementation defined</b><span class=special>;</span>
  61. <span class=special>}</span> <span class=comment>// namespace boost::multi_index::detail</span>
  62. <span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
  63. <span class=special>}</span> <span class=comment>// namespace boost</span>
  64. </pre></blockquote>
  65. <p>
  66. <code>ranked_index_fwd.hpp</code> provides forward declarations for index specifiers
  67. <a href="#unique_non_unique"><code>ranked_unique</code> and <code>ranked_non_unique</code></a> and
  68. their associated <a href="#rnk_indices">ranked index</a> classes.
  69. </p>
  70. <h2>
  71. <a name="synopsis">Header
  72. <a href="../../../../boost/multi_index/ranked_index.hpp">
  73. <code>"boost/multi_index/ranked_index.hpp"</code></a> synopsis</a></h2>
  74. <blockquote><pre>
  75. <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>initializer_list</span><span class=special>&gt;</span>
  76. <span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
  77. <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
  78. <span class=comment>// index specifiers ranked_unique and ranked_non_unique</span>
  79. <span class=keyword>template</span><span class=special>&lt;</span><b>consult ranked_unique reference for arguments</b><span class=special>&gt;</span>
  80. <span class=keyword>struct</span> <span class=identifier>ranked_unique</span><span class=special>;</span>
  81. <span class=keyword>template</span><span class=special>&lt;</span><b>consult ranked_non_unique reference for arguments</b><span class=special>&gt;</span>
  82. <span class=keyword>struct</span> <span class=identifier>ranked_non_unique</span><span class=special>;</span>
  83. <span class=comment>// indices</span>
  84. <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
  85. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span> <span class=keyword>class</span> <b>index class name implementation defined</b><span class=special>;</span>
  86. <span class=comment>// index comparison:</span>
  87. <span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
  88. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  89. <span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
  90. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>);</span>
  91. <span class=comment>// index specialized algorithms:</span>
  92. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span>
  93. <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>y</span><span class=special>);</span>
  94. <span class=special>}</span> <span class=comment>// namespace boost::multi_index::detail</span>
  95. <span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
  96. <span class=special>}</span> <span class=comment>// namespace boost</span>
  97. </pre></blockquote>
  98. <h3><a name="unique_non_unique">
  99. Index specifiers <code>ranked_unique</code> and <code>ranked_non_unique</code>
  100. </a></h3>
  101. <p>
  102. These <a href="indices.html#index_specification">index specifiers</a> allow
  103. for insertion of <a href="#rnk_indices">ranked indices</a> without and with
  104. allowance of duplicate elements, respectively. The syntax of <code>ranked_unique</code>
  105. and <code>ranked_non_unique</code> coincide, thus we describe them in a grouped manner.
  106. <code>ranked_unique</code> and <code>ranked_non_unique</code> can be instantiated in
  107. two different forms, according to whether a tag list for the index is provided or not:
  108. </p>
  109. <blockquote><pre>
  110. <span class=keyword>template</span><span class=special>&lt;</span>
  111. <span class=keyword>typename</span> <span class=identifier>KeyFromValue</span><span class=special>,</span>
  112. <span class=keyword>typename</span> <span class=identifier>Compare</span><span class=special>=</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special>&lt;</span><span class=identifier>KeyFromValue</span><span class=special>::</span><span class=identifier>result_type</span><span class=special>&gt;</span>
  113. <span class=special>&gt;</span>
  114. <span class=keyword>struct</span> <span class=special>(</span><span class=identifier>ranked_unique</span> <span class=special>|</span> <span class=identifier>ranked_non_unique</span><span class=special>)</span><span class=special>;</span>
  115. <span class=keyword>template</span><span class=special>&lt;</span>
  116. <span class=keyword>typename</span> <span class=identifier>TagList</span><span class=special>,</span>
  117. <span class=keyword>typename</span> <span class=identifier>KeyFromValue</span><span class=special>,</span>
  118. <span class=keyword>typename</span> <span class=identifier>Compare</span><span class=special>=</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special>&lt;</span><span class=identifier>KeyFromValue</span><span class=special>::</span><span class=identifier>result_type</span><span class=special>&gt;</span>
  119. <span class=special>&gt;</span>
  120. <span class=keyword>struct</span> <span class=special>(</span><span class=identifier>ranked_unique</span> <span class=special>|</span> <span class=identifier>ranked_non_unique</span><span class=special>)</span><span class=special>;</span>
  121. </pre></blockquote>
  122. <p>
  123. If provided, <code>TagList</code> must be an instantiation of the class template
  124. <a href="indices.html#tag"><code>tag</code></a>.
  125. The template arguments are used by the corresponding index implementation,
  126. refer to the <a href="#rnk_indices">ranked indices</a> reference section for further
  127. explanations on their acceptable type values.
  128. </p>
  129. <h3><a name="rnk_indices">Ranked indices</a></h3>
  130. <p>
  131. Ranked indices are a variation of <a href="ord_indices.html">ordered indices</a>
  132. providing additional capabilities for calculation of and access by rank; the <i>rank</i> of an element is the
  133. distance to it from the beginning of the index. Besides this extension, ranked indices replicate the
  134. public interface of ordered indices with the difference, complexity-wise, that <a href="#complexity_signature">deletion</a>
  135. is done in logarithmic rather than constant time. Also, execution times and memory consumption are
  136. expected to be poorer due to the internal bookkeeping needed to maintain rank-related information.
  137. As with ordered indices, ranked indices can be unique (no duplicate elements are allowed)
  138. or non-unique: either version is associated to a different index specifier, but
  139. the interface of both index types is the same.
  140. </p>
  141. <p>
  142. In what follows, we only describe the extra operations provided by ranked indices: for the
  143. rest refer to the <a href="ord_indices.html#ord_indices">documentation</a> for ordered
  144. indices, bearing in mind the occasional differences in complexity.
  145. </p>
  146. <blockquote><pre>
  147. <span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
  148. <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
  149. <b>implementation defined </b><span class=identifier>unbounded</span><span class=special>;</span> <span class=comment>// see range_rank()</span>
  150. <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
  151. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined: dependent on types Value, Allocator,
  152. TagList, KeyFromValue, Compare</b><span class=special>&gt;</span>
  153. <span class=keyword>class</span> <b>name is implementation defined</b>
  154. <span class=special>{</span>
  155. <span class=keyword>public</span><span class=special>:</span>
  156. <span class=comment>// types:</span>
  157. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>KeyFromValue</span><span class=special>::</span><span class=identifier>result_type</span> <span class=identifier>key_type</span><span class=special>;</span>
  158. <span class=keyword>typedef</span> <span class=identifier>Value</span> <span class=identifier>value_type</span><span class=special>;</span>
  159. <span class=keyword>typedef</span> <span class=identifier>KeyFromValue</span> <span class=identifier>key_from_value</span><span class=special>;</span>
  160. <span class=keyword>typedef</span> <span class=identifier>Compare</span> <span class=identifier>key_compare</span><span class=special>;</span>
  161. <span class=keyword>typedef</span> <b>implementation defined </b><span class=identifier>value_compare</span><span class=special>;</span>
  162. <span class=keyword>typedef</span> <span class=identifier>boost</span><span class=special>::</span><span class=identifier>tuple</span><span class=special>&lt;</span><span class=identifier>key_from_value</span><span class=special>,</span><span class=identifier>key_compare</span><span class=special>&gt;</span> <span class=identifier>ctor_args</span><span class=special>;</span>
  163. <span class=keyword>typedef</span> <span class=identifier>TagList</span> <span class=identifier>tag_list</span><span class=special>;</span>
  164. <span class=keyword>typedef</span> <span class=identifier>Allocator</span> <span class=identifier>allocator_type</span><span class=special>;</span>
  165. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>::</span><span class=identifier>reference</span> <span class=identifier>reference</span><span class=special>;</span>
  166. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>::</span><span class=identifier>const_reference</span> <span class=identifier>const_reference</span><span class=special>;</span>
  167. <span class=keyword>typedef</span> <b>implementation defined </b><span class=identifier>iterator</span><span class=special>;</span>
  168. <span class=keyword>typedef</span> <b>implementation defined </b><span class=identifier>const_iterator</span><span class=special>;</span>
  169. <span class=keyword>typedef</span> <b>implementation defined </b><span class=identifier>size_type</span><span class=special>;</span>
  170. <span class=keyword>typedef</span> <b>implementation defined </b><span class=identifier>difference_type</span><span class=special>;</span>
  171. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>::</span><span class=identifier>pointer</span> <span class=identifier>pointer</span><span class=special>;</span>
  172. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>::</span><span class=identifier>const_pointer</span> <span class=identifier>const_pointer</span><span class=special>;</span>
  173. <span class=keyword>typedef</span> <b>equivalent to
  174. std::reverse_iterator&lt;iterator&gt;</b> <span class=identifier>reverse_iterator</span><span class=special>;</span>
  175. <span class=keyword>typedef</span> <b>equivalent to
  176. std::reverse_iterator&lt;const_iterator&gt;</b> <span class=identifier>const_reverse_iterator</span><span class=special>;</span>
  177. <span class=comment>// construct/copy/destroy:</span>
  178. <b>index class name</b><span class=special>&amp;</span> <span class=keyword>operator</span><span class=special>=(</span><span class=keyword>const</span> <b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  179. <b>index class name</b><span class=special>&amp;</span> <span class=keyword>operator</span><span class=special>=(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>initializer_list</span><span class=special>&lt;</span><span class=identifier>value_type</span><span class=special>&gt;</span> <span class=identifier>list</span><span class=special>);</span>
  180. <span class=identifier>allocator_type</span> <span class=identifier>get_allocator</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  181. <span class=comment>// iterators:</span>
  182. <span class=identifier>iterator</span> <span class=identifier>begin</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  183. <span class=identifier>const_iterator</span> <span class=identifier>begin</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  184. <span class=identifier>iterator</span> <span class=identifier>end</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  185. <span class=identifier>const_iterator</span> <span class=identifier>end</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  186. <span class=identifier>reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  187. <span class=identifier>const_reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  188. <span class=identifier>reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  189. <span class=identifier>const_reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  190. <span class=identifier>const_iterator</span> <span class=identifier>cbegin</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  191. <span class=identifier>const_iterator</span> <span class=identifier>cend</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  192. <span class=identifier>const_reverse_iterator</span> <span class=identifier>crbegin</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  193. <span class=identifier>const_reverse_iterator</span> <span class=identifier>crend</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  194. <span class=identifier>iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  195. <span class=identifier>const_iterator</span> <span class=identifier>iterator_to</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  196. <span class=comment>// capacity:</span>
  197. <span class=keyword>bool</span> <span class=identifier>empty</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  198. <span class=identifier>size_type</span> <span class=identifier>size</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  199. <span class=identifier>size_type</span> <span class=identifier>max_size</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
  200. <span class=comment>// modifiers:</span>
  201. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span><span class=special>...</span> <span class=identifier>Args</span><span class=special>&gt;</span>
  202. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=keyword>bool</span><span class=special>&gt;</span> <span class=identifier>emplace</span><span class=special>(</span><span class=identifier>Args</span><span class=special>&amp;&amp;...</span> <span class=identifier>args</span><span class=special>);</span>
  203. <span class=keyword>template</span> <span class=special>&lt;</span><span class=keyword>typename</span><span class=special>...</span> <span class=identifier>Args</span><span class=special>&gt;</span>
  204. <span class=identifier>iterator</span> <span class=identifier>emplace_hint</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Args</span><span class=special>&amp;&amp;...</span> <span class=identifier>args</span><span class=special>);</span>
  205. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=keyword>bool</span><span class=special>&gt;</span> <span class=identifier>insert</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  206. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=keyword>bool</span><span class=special>&gt;</span> <span class=identifier>insert</span><span class=special>(</span><span class=identifier>value_type</span><span class=special>&amp;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  207. <span class=identifier>iterator</span> <span class=identifier>insert</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  208. <span class=identifier>iterator</span> <span class=identifier>insert</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>value_type</span><span class=special>&amp;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  209. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>InputIterator</span><span class=special>&gt;</span>
  210. <span class=keyword>void</span> <span class=identifier>insert</span><span class=special>(</span><span class=identifier>InputIterator</span> <span class=identifier>first</span><span class=special>,</span><span class=identifier>InputIterator</span> <span class=identifier>last</span><span class=special>);</span>
  211. <span class=keyword>void</span> <span class=identifier>insert</span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>initializer_list</span><span class=special>&lt;</span><span class=identifier>value_type</span><span class=special>&gt;</span> <span class=identifier>list</span><span class=special>);</span>
  212. <span class=identifier>iterator</span> <span class=identifier>erase</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>);</span>
  213. <span class=identifier>size_type</span> <span class=identifier>erase</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>key_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  214. <span class=identifier>iterator</span> <span class=identifier>erase</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>first</span><span class=special>,</span><span class=identifier>iterator</span> <span class=identifier>last</span><span class=special>);</span>
  215. <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  216. <span class=keyword>bool</span> <span class=identifier>replace</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>value_type</span><span class=special>&amp;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  217. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
  218. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
  219. <span class=keyword>bool</span> <span class=identifier>modify</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
  220. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>&gt;</span> <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>);</span>
  221. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Modifier</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Rollback</span><span class=special>&gt;</span>
  222. <span class=keyword>bool</span> <span class=identifier>modify_key</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>Modifier</span> <span class=identifier>mod</span><span class=special>,</span><span class=identifier>Rollback</span> <span class=identifier>back</span><span class=special>);</span>
  223. <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  224. <span class=keyword>void</span> <span class=identifier>clear</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  225. <span class=comment>// observers:</span>
  226. <span class=identifier>key_from_value</span> <span class=identifier>key_extractor</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  227. <span class=identifier>key_compare</span> <span class=identifier>key_comp</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  228. <span class=identifier>value_compare</span> <span class=identifier>value_comp</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  229. <span class=comment>// set operations:</span>
  230. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  231. <span class=identifier>iterator</span> <span class=identifier>find</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  232. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  233. <span class=identifier>iterator</span> <span class=identifier>find</span><span class=special>(</span>
  234. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  235. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  236. <span class=identifier>size_type</span> <span class=identifier>count</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  237. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  238. <span class=identifier>size_type</span> <span class=identifier>count</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  239. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  240. <span class=identifier>iterator</span> <span class=identifier>lower_bound</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  241. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  242. <span class=identifier>iterator</span> <span class=identifier>lower_bound</span><span class=special>(</span>
  243. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  244. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  245. <span class=identifier>iterator</span> <span class=identifier>upper_bound</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  246. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  247. <span class=identifier>iterator</span> <span class=identifier>upper_bound</span><span class=special>(</span>
  248. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  249. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  250. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=identifier>iterator</span><span class=special>&gt;</span> <span class=identifier>equal_range</span><span class=special>(</span>
  251. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  252. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  253. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=identifier>iterator</span><span class=special>&gt;</span> <span class=identifier>equal_range</span><span class=special>(</span>
  254. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  255. <span class=comment>// range:</span>
  256. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>LowerBounder</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>UpperBounder</span><span class=special>&gt;</span>
  257. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>iterator</span><span class=special>,</span><span class=identifier>iterator</span><span class=special>&gt;</span> <span class=identifier>range</span><span class=special>(</span>
  258. <span class=identifier>LowerBounder</span> <span class=identifier>lower</span><span class=special>,</span><span class=identifier>UpperBounder</span> <span class=identifier>upper</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  259. <span class=comment>// rank operations:</span>
  260. <span class=identifier>iterator</span> <span class=identifier>nth</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  261. <span class=identifier>size_type</span> <span class=identifier>rank</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  262. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  263. <span class=identifier>size_type</span> <span class=identifier>find_rank</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  264. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  265. <span class=identifier>size_type</span> <span class=identifier>find_rank</span><span class=special>(</span>
  266. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  267. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  268. <span class=identifier>size_type</span> <span class=identifier>lower_bound_rank</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  269. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  270. <span class=identifier>size_type</span> <span class=identifier>lower_bound_rank</span><span class=special>(</span>
  271. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  272. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  273. <span class=identifier>size_type</span> <span class=identifier>upper_bound_rank</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  274. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  275. <span class=identifier>size_type</span> <span class=identifier>upper_bound_rank</span><span class=special>(</span>
  276. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  277. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>&gt;</span>
  278. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>size_type</span><span class=special>,</span><span class=identifier>size_type</span><span class=special>&gt;</span> <span class=identifier>equal_range_rank</span><span class=special>(</span>
  279. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  280. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>CompatibleKey</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>CompatibleCompare</span><span class=special>&gt;</span>
  281. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>size_type</span><span class=special>,</span><span class=identifier>size_type</span><span class=special>&gt;</span> <span class=identifier>equal_range_rank</span><span class=special>(</span>
  282. <span class=keyword>const</span> <span class=identifier>CompatibleKey</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=keyword>const</span> <span class=identifier>CompatibleCompare</span><span class=special>&amp;</span> <span class=identifier>comp</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  283. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>LowerBounder</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>UpperBounder</span><span class=special>&gt;</span>
  284. <span class=identifier>std</span><span class=special>::</span><span class=identifier>pair</span><span class=special>&lt;</span><span class=identifier>size_type</span><span class=special>,</span><span class=identifier>size_type</span><span class=special>&gt;</span>
  285. <span class=identifier>range_rank</span><span class=special>(</span><span class=identifier>LowerBounder</span> <span class=identifier>lower</span><span class=special>,</span><span class=identifier>UpperBounder</span> <span class=identifier>upper</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
  286. <span class=special>};</span>
  287. <span class=comment>// index comparison:</span>
  288. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  289. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>==(</span>
  290. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  291. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  292. <span class=special>{</span>
  293. <span class=keyword>return</span> <span class=identifier>x</span><span class=special>.</span><span class=identifier>size</span><span class=special>()==</span><span class=identifier>y</span><span class=special>.</span><span class=identifier>size</span><span class=special>()&amp;&amp;</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>equal</span><span class=special>(</span><span class=identifier>x</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>x</span><span class=special>.</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>y</span><span class=special>.</span><span class=identifier>begin</span><span class=special>());</span>
  294. <span class=special>}</span>
  295. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  296. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&lt;(</span>
  297. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  298. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  299. <span class=special>{</span>
  300. <span class=keyword>return</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>lexicographical_compare</span><span class=special>(</span><span class=identifier>x</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>x</span><span class=special>.</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>y</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>y</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
  301. <span class=special>}</span>
  302. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  303. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>!=(</span>
  304. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  305. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  306. <span class=special>{</span>
  307. <span class=keyword>return</span> <span class=special>!(</span><span class=identifier>x</span><span class=special>==</span><span class=identifier>y</span><span class=special>);</span>
  308. <span class=special>}</span>
  309. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  310. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&gt;(</span>
  311. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  312. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  313. <span class=special>{</span>
  314. <span class=keyword>return</span> <span class=identifier>y</span><span class=special>&lt;</span><span class=identifier>x</span><span class=special>;</span>
  315. <span class=special>}</span>
  316. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  317. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&gt;=(</span>
  318. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  319. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  320. <span class=special>{</span>
  321. <span class=keyword>return</span> <span class=special>!(</span><span class=identifier>x</span><span class=special>&lt;</span><span class=identifier>y</span><span class=special>);</span>
  322. <span class=special>}</span>
  323. <span class=keyword>template</span><span class=special>&lt;</span><b>arg set 1</b><span class=special>,</span><b>arg set 2</b><span class=special>&gt;</span>
  324. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&lt;=(</span>
  325. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 1</b><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
  326. <span class=keyword>const</span> <b>index class name</b><span class=special>&lt;</span><b>arg set 2</b><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
  327. <span class=special>{</span>
  328. <span class=keyword>return</span> <span class=special>!(</span><span class=identifier>x</span><span class=special>&gt;</span><span class=identifier>y</span><span class=special>);</span>
  329. <span class=special>}</span>
  330. <span class=comment>// index specialized algorithms:</span>
  331. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span>
  332. <span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>y</span><span class=special>);</span>
  333. <span class=special>}</span> <span class=comment>// namespace boost::multi_index::detail</span>
  334. <span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
  335. <span class=special>}</span> <span class=comment>// namespace boost</span>
  336. </pre></blockquote>
  337. <h4><a name="complexity_signature">Complexity signature</a></h4>
  338. <p>
  339. We follow the terminology described in the
  340. <a href="indices.html#complexity_signature">complexity signature
  341. section</a>. The complexity signature of ranked indices is:
  342. <ul>
  343. <li>copying: <code>c(n)=n*log(n)</code>,</li>
  344. <li>insertion: <code>i(n)=log(n)</code>,</li>
  345. <li>hinted insertion: <code>h(n)=1</code> (constant) if the hint element
  346. is immediately after the point of insertion, <code>h(n)=log(n)</code> otherwise,</li>
  347. <li>deletion: <b><code>d(n)=log(n)</code></b> ,</li>
  348. <li>replacement: <code>r(n)=1</code> (constant) if the element position does not
  349. change, <code>r(n)=log(n)</code> otherwise,</li>
  350. <li>modifying: <code>m(n)=1</code> (constant) if the element position does not
  351. change, <code>m(n)=log(n)</code> otherwise.</li>
  352. </ul>
  353. </p>
  354. <p>
  355. These complexity guarantees are the same as those of
  356. <a href="ord_indices.html#complexity_signature">ordered indices</a>
  357. except for deletion, which is <code>log(n)</code> here and amortized constant there.
  358. </p>
  359. <h4><a name="instantiation_types">Instantiation types</a></h4>
  360. <p>Ordered indices are instantiated internally to <code>multi_index_container</code> and
  361. specified by means of <a href="indices.html#indexed_by"><code>indexed_by</code></a>
  362. with <a href="#unique_non_unique"> index specifiers <code>ranked_unique</code>
  363. and <code>ranked_non_unique</code></a>. Instantiations are dependent on the
  364. following types:
  365. <ul>
  366. <li><code>Value</code> from <code>multi_index_container</code>,</li>
  367. <li><code>Allocator</code> from <code>multi_index_container</code>,</li>
  368. <li><code>TagList</code> from the index specifier (if provided, otherwise <code>tag&lt;&gt;</code> is assumed),</li>
  369. <li><code>KeyFromValue</code> from the index specifier,</li>
  370. <li><code>Compare</code> from the index specifier.</li>
  371. </ul>
  372. These types are subject to the same requirements as specified for
  373. <a href="ord_indices.html#instantiation_types">ordered indices</a>.
  374. </p>
  375. <h4><a name="rank_operations">Rank operations</a></h4>
  376. <p>
  377. The <i>rank</i> of an iterator <code>it</code> of a given container <code>c</code> (and,
  378. by extension, of the element it points to if the iterator is dereferenceable)
  379. is <code>std::distance(c.begin(),it)</code>.
  380. </p>
  381. <p>
  382. See the documentation of ordered indices for an explanation of the notions of
  383. <a href="ord_indices.html#set_operations"><i>compatible extension</i>,
  384. <i>compatible key</i></a>,
  385. <a href="ord_indices.html#range_operations"><i>lower bounder</i> and <i>upper bounder</i></a>, which are
  386. referred to below.
  387. </p>
  388. <code>iterator nth(size_type n)const;</code>
  389. <blockquote>
  390. <b>Effects:</b> Returns an iterator with rank <code>n</code>,
  391. or <code>end()</code> if <code>n&gt;=size()</code>.<br>
  392. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  393. </blockquote>
  394. <code>size_type rank(iterator position)const;
  395. </code>
  396. <blockquote>
  397. <b>Requires:</b> <code>position</code> is a valid iterator of the index.<br>
  398. <b>Effects:</b> Returns the rank of <code>position</code>.<br>
  399. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  400. </blockquote>
  401. <code>template&lt;typename CompatibleKey> size_type find_rank(const CompatibleKey&amp; x)const;
  402. </code>
  403. <blockquote>
  404. <b>Requires:</b> <code>CompatibleKey</code> is a compatible key of
  405. <code>key_compare</code>.<br>
  406. <b>Effects:</b> Equivalent to <code>rank(find(k))</code>.<br>
  407. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  408. </blockquote>
  409. <code>template&lt;typename CompatibleKey,typename CompatibleCompare><br>
  410. size_type find_rank(const CompatibleKey&amp; x,const CompatibleCompare&amp; comp)const;
  411. </code>
  412. <blockquote>
  413. <b>Requires:</b> (<code>CompatibleKey</code>, <code>CompatibleCompare</code>)
  414. is a compatible extension of <code>key_compare</code>.<br>
  415. <b>Effects:</b> Equivalent to <code>rank(find(x,comp))</code>.<br>
  416. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  417. </blockquote>
  418. <code>template&lt;typename CompatibleKey><br>
  419. size_type lower_bound_rank(const CompatibleKey&amp; x)const;
  420. </code>
  421. <blockquote>
  422. <b>Requires:</b> <code>CompatibleKey</code> is a compatible key of
  423. <code>key_compare</code>.<br>
  424. <b>Effects:</b> Equivalent to <code>rank(lower_bound(x))</code>.<br>
  425. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  426. </blockquote>
  427. <code>template&lt;typename CompatibleKey,typename CompatibleCompare><br>
  428. size_type lower_bound_rank(const CompatibleKey&amp; x,const CompatibleCompare&amp; comp)const;
  429. </code>
  430. <blockquote>
  431. <b>Requires:</b> (<code>CompatibleKey</code>, <code>CompatibleCompare</code>)
  432. is a compatible extension of <code>key_compare</code>.<br>
  433. <b>Effects:</b> Equivalent to <code>rank(lower_bound(x,comp))</code>.<br>
  434. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  435. </blockquote>
  436. <code>template&lt;typename CompatibleKey><br>
  437. size_type upper_bound_rank(const CompatibleKey&amp; x)const;
  438. </code>
  439. <blockquote>
  440. <b>Requires:</b> <code>CompatibleKey</code> is a compatible key of
  441. <code>key_compare</code>.<br>
  442. <b>Effects:</b> Equivalent to <code>rank(upper_bound(x))</code>.<br>
  443. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  444. </blockquote>
  445. <code>template&lt;typename CompatibleKey,typename CompatibleCompare><br>
  446. size_type upper_bound_rank(const CompatibleKey&amp; x,const CompatibleCompare&amp; comp)const;
  447. </code>
  448. <blockquote>
  449. <b>Requires:</b> (<code>CompatibleKey</code>, <code>CompatibleCompare</code>)
  450. is a compatible extension of <code>key_compare</code>.<br>
  451. <b>Effects:</b> Equivalent to <code>rank(upper_bound(x,comp))</code>.<br>
  452. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  453. </blockquote>
  454. <code>template&lt;typename CompatibleKey><br>
  455. std::pair&lt;size_type,size_type> equal_range_rank(<br>
  456. &nbsp;&nbsp;const CompatibleKey&amp; x)const;
  457. </code>
  458. <blockquote>
  459. <b>Requires:</b> <code>CompatibleKey</code> is a compatible key of
  460. <code>key_compare</code>.<br>
  461. <b>Effects:</b> Equivalent to <code>make_pair(lower_bound_rank(x),upper_bound_rank(x))</code>.<br>
  462. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  463. </blockquote>
  464. <code>template&lt;typename CompatibleKey,typename CompatibleCompare><br>
  465. std::pair&lt;size_type,size_type> equal_range_rank(<br>
  466. &nbsp;&nbsp;const CompatibleKey&amp; x,const CompatibleCompare&amp; comp)const;
  467. </code>
  468. <blockquote>
  469. <b>Requires:</b> (<code>CompatibleKey</code>, <code>CompatibleCompare</code>)
  470. is a compatible extension of <code>key_compare</code>.<br>
  471. <b>Effects:</b> Equivalent to
  472. <code>make_pair(lower_bound_rank(x,comp),upper_bound_rank(x,comp))</code>.<br>
  473. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  474. </blockquote>
  475. <code>template&lt;typename LowerBounder,typename UpperBounder><br>
  476. std::pair&lt;size_type,size_type> range_rank(<br>
  477. &nbsp;&nbsp;LowerBounder lower,UpperBounder upper)const;
  478. </code>
  479. <blockquote>
  480. <b>Requires:</b> <code>LowerBounder</code> and <code>UpperBounder</code> are
  481. a lower and upper bounder of <code>key_compare</code>, respectively.<br>
  482. <b>Effects:</b> Equivalent to
  483. <blockquote><pre>
  484. <span class=keyword>auto</span> <span class=identifier>p</span><span class=special>=</span><span class=identifier>range</span><span class=special>(</span><span class=identifier>lower</span><span class=special>,</span><span class=identifier>upper</span><span class=special>);</span>
  485. <span class=keyword>return</span> <span class=identifier>make_pair</span><span class=special>(</span><span class=identifier>rank</span><span class=special>(</span><span class=identifier>p</span><span class=special>.</span><span class=identifier>first</span><span class=special>),</span><span class=identifier>rank</span><span class=special>(</span><span class=identifier>p</span><span class=special>.</span><span class=identifier>second</span><span class=special>));</span>
  486. </pre></blockquote>
  487. <b>Complexity:</b> <code>O(log(n))</code>.<br>
  488. <b>Variants:</b> In place of <code>lower</code> or <code>upper</code> (or both),
  489. the singular value <code>boost::multi_index::unbounded</code> can be
  490. provided. This acts as a predicate which all values of type <code>key_type</code>
  491. satisfy.<br>
  492. </blockquote>
  493. <h4><a name="serialization">Serialization</a></h4>
  494. <p>
  495. The prerequisites and postconditions associated to serialization of
  496. <code>multi_index_container</code>s with ranked indices are exactly the same
  497. as those of <a href="ord_indices.html#serialization">ordered indices</a>.
  498. <hr>
  499. <div class="prev_link"><a href="ord_indices.html"><img src="../prev.gif" alt="ordered_indices" border="0"><br>
  500. Ordered indices
  501. </a></div>
  502. <div class="up_link"><a href="index.html"><img src="../up.gif" alt="Boost.MultiIndex reference" border="0"><br>
  503. Boost.MultiIndex reference
  504. </a></div>
  505. <div class="next_link"><a href="hash_indices.html"><img src="../next.gif" alt="hashed indices" border="0"><br>
  506. Hashed indices
  507. </a></div><br clear="all" style="clear: all;">
  508. <br>
  509. <p>Revised May 4th 2015</p>
  510. <p>&copy; Copyright 2003-2015 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
  511. Distributed under the Boost Software
  512. License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
  513. LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
  514. http://www.boost.org/LICENSE_1_0.txt</a>)
  515. </p>
  516. </body>
  517. </html>