seq_indices.html 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065
  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 - Sequenced 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="hash_indices.html">
  9. <link rel="up" href="index.html">
  10. <link rel="next" href="rnd_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 Sequenced indices reference</h1>
  15. <div class="prev_link"><a href="hash_indices.html"><img src="../prev.gif" alt="hashed indices" border="0"><br>
  16. Hashed 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="rnd_indices.html"><img src="../next.gif" alt="random access indices" border="0"><br>
  22. Random access indices
  23. </a></div><br clear="all" style="clear: all;">
  24. <hr>
  25. <h2>Contents</h2>
  26. <ul>
  27. <li><a href="#seq_index_fwd_synopsis">Header
  28. <code>"boost/multi_index/sequenced_index_fwd.hpp"</code> synopsis</a></li>
  29. <li><a href="#synopsis">Header
  30. <code>"boost/multi_index/sequenced_index.hpp"</code> synopsis</a>
  31. <ul>
  32. <li><a href="#sequenced"><code>sequenced</code> index specifier</a></li>
  33. <li><a href="#seq_indices">Sequenced indices</a>
  34. <ul>
  35. <li><a href="#complexity_signature">Complexity signature</a></li>
  36. <li><a href="#instantiation_types">Instantiation types</a></li>
  37. <li><a href="#constructors">Constructors, copy and assignment</a></li>
  38. <li><a href="#iterators">Iterators</a></li>
  39. <li><a href="#capacity">Capacity operations</a></li>
  40. <li><a href="#modifiers">Modifiers</a></li>
  41. <li><a href="#list_operations">List operations</a></li>
  42. <li><a href="#rearrange_operations">Rearrange operations</a></li>
  43. <li><a href="#serialization">Serialization</a></li>
  44. </ul>
  45. </li>
  46. </ul>
  47. </li>
  48. </ul>
  49. <h2>
  50. <a name="seq_index_fwd_synopsis">Header
  51. <a href="../../../../boost/multi_index/sequenced_index_fwd.hpp">
  52. <code>"boost/multi_index/sequenced_index_fwd.hpp"</code></a> synopsis</a></h2>
  53. <blockquote><pre>
  54. <span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
  55. <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
  56. <span class=comment>// sequenced index specifier</span>
  57. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>TagList</span><span class=special>=</span><span class=identifier>tag</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>sequenced</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 class name 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>sequenced_index_fwd.hpp</code> provides forward declarations for the
  67. <a href="#sequenced"><code>sequenced</code></a> index specifier and
  68. its associated <a href="#seq_indices">sequenced index</a> class.
  69. </p>
  70. <h2>
  71. <a name="synopsis">Header
  72. <a href="../../../../boost/multi_index/sequenced_index.hpp">
  73. <code>"boost/multi_index/sequenced_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>// sequenced index specifier</span>
  79. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>TagList</span><span class=special>=</span><span class=identifier>tag</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>sequenced</span><span class=special>;</span>
  80. <span class=comment>// indices</span>
  81. <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
  82. <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>
  83. <span class=comment>// index comparison:</span>
  84. <span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
  85. <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>
  86. <span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
  87. <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>
  88. <span class=comment>// index specialized algorithms:</span>
  89. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span>
  90. <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>
  91. <span class=special>}</span> <span class=comment>// namespace boost::multi_index::detail</span>
  92. <span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
  93. <span class=special>}</span> <span class=comment>// namespace boost</span>
  94. </pre></blockquote>
  95. <h3><a name="sequenced">
  96. <code>sequenced</code> index specifier
  97. </a></h3>
  98. <p>
  99. This index specifier allows for insertion of a <a href="#seq_indices">sequenced
  100. index</a>.</p>
  101. <blockquote><pre>
  102. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>TagList</span><span class=special>=</span><span class=identifier>tag</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>sequenced</span><span class=special>;</span>
  103. </pre></blockquote>
  104. <p>If provided, <code>TagList</code> must be an instantiation of
  105. <a href="indices.html#tag"><code>tag</code></a>.
  106. </p>
  107. <h3><a name="seq_indices">Sequenced indices</a></h3>
  108. <p>
  109. Sequenced indices are modeled after the semantics of a bidirectional list
  110. like <code>std::list</code>. Elements in a sequenced index are by default
  111. sorted according to their order of insertion: this means that new elements
  112. inserted through a different index of the <code>multi_index_container</code> are appended
  113. to the end of the sequenced index. Additionally, the index allows for free
  114. reordering of elements in the same vein as <code>std::list</code> does. Validity
  115. of iterators and references to elements is preserved in all operations.
  116. </p>
  117. <p>
  118. Except where noted or if the corresponding interface does not exist, sequenced
  119. indices verify the same container requirements as <code>std::list</code>:
  120. we only provide descriptions of those types and operations that are either not
  121. present in <code>std::list</code> or behave differently. Some of the
  122. most important differences are:
  123. <ul>
  124. <li>The complexity of some operations, notably insertion and deletion, differ
  125. from those of <code>std::list</code>.
  126. </li>
  127. <li>Unlike as in <code>std::list</code>, insertions into a sequenced index
  128. may fail due to clashings with other indices. This alters the semantics
  129. of the operations provided with respect to their analogues in
  130. <code>std::list</code>.
  131. </li>
  132. <li>Elements in a sequenced index are not mutable, and can only be changed
  133. by means of <a href="#replace"><code>replace</code></a> and
  134. <a href="#modify"><code>modify</code></a> member functions.
  135. </li>
  136. </ul>
  137. </p>
  138. <blockquote><pre>
  139. <span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
  140. <span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
  141. <span class=keyword>namespace</span> <span class=identifier>detail</span><span class=special>{</span>
  142. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined: dependent on types Value, Allocator, TagList</b><span class=special>&gt;</span>
  143. <span class=keyword>class</span> <b>name is implementation defined</b>
  144. <span class=special>{</span>
  145. <span class=keyword>public</span><span class=special>:</span>
  146. <span class=comment>// types:</span>
  147. <span class=keyword>typedef</span> <span class=identifier>Value</span> <span class=identifier>value_type</span><span class=special>;</span>
  148. <span class=keyword>typedef</span> <span class=identifier>boost</span><span class=special>::</span><span class=identifier>tuples</span><span class=special>::</span><span class=identifier>null_type</span> <span class=identifier>ctor_args</span><span class=special>;</span>
  149. <span class=keyword>typedef</span> <span class=identifier>TagList</span> <span class=identifier>tag_list</span><span class=special>;</span>
  150. <span class=keyword>typedef</span> <span class=identifier>Allocator</span> <span class=identifier>allocator_type</span><span class=special>;</span>
  151. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>allocator_type</span><span class=special>::</span><span class=identifier>reference</span> <span class=identifier>reference</span><span class=special>;</span>
  152. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>allocator_type</span><span class=special>::</span><span class=identifier>const_reference</span> <span class=identifier>const_reference</span><span class=special>;</span>
  153. <span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>iterator</span><span class=special>;</span>
  154. <span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>const_iterator</span><span class=special>;</span>
  155. <span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>size_type</span><span class=special>;</span>
  156. <span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>difference_type</span><span class=special>;</span>
  157. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>allocator_type</span><span class=special>::</span><span class=identifier>pointer</span> <span class=identifier>pointer</span><span class=special>;</span>
  158. <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>allocator_type</span><span class=special>::</span><span class=identifier>const_pointer</span> <span class=identifier>const_pointer</span><span class=special>;</span>
  159. <span class=keyword>typedef</span> <b>equivalent to
  160. std::reverse_iterator&lt;iterator&gt;</b> <span class=identifier>reverse_iterator</span><span class=special>;</span>
  161. <span class=keyword>typedef</span> <b>equivalent to
  162. std::reverse_iterator&lt;const_iterator&gt;</b> <span class=identifier>const_reverse_iterator</span><span class=special>;</span>
  163. <span class=comment>// construct/copy/destroy:</span>
  164. <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>
  165. <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>
  166. <span class=keyword>template</span> <span class=special>&lt;</span><span class=keyword>class</span> <span class=identifier>InputIterator</span><span class=special>&gt;</span>
  167. <span class=keyword>void</span> <span class=identifier>assign</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>
  168. <span class=keyword>void</span> <span class=identifier>assign</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>
  169. <span class=keyword>void</span> <span class=identifier>assign</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=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>value</span><span class=special>);</span>
  170. <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>
  171. <span class=comment>// iterators:</span>
  172. <span class=identifier>iterator</span> <span class=identifier>begin</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  173. <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>
  174. <span class=identifier>iterator</span> <span class=identifier>end</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  175. <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>
  176. <span class=identifier>reverse_iterator</span> <span class=identifier>rbegin</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  177. <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>
  178. <span class=identifier>reverse_iterator</span> <span class=identifier>rend</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  179. <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>
  180. <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>
  181. <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>
  182. <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>
  183. <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>
  184. <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>
  185. <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>
  186. <span class=comment>// capacity:</span>
  187. <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>
  188. <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>
  189. <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>
  190. <span class=keyword>void</span> <span class=identifier>resize</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>n</span><span class=special>);</span>
  191. <span class=keyword>void</span> <span class=identifier>resize</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=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  192. <span class=comment>// access:</span>
  193. <span class=identifier>const_reference</span> <span class=identifier>front</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  194. <span class=identifier>const_reference</span> <span class=identifier>back</span><span class=special>()</span><span class=keyword>const</span><span class=special>;</span>
  195. <span class=comment>// modifiers:</span>
  196. <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>
  197. <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_front</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>
  198. <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>push_front</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>
  199. <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>push_front</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>
  200. <span class=keyword>void</span> <span class=identifier>pop_front</span><span class=special>();</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_back</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=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>push_back</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>
  204. <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>push_back</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>
  205. <span class=keyword>void</span> <span class=identifier>pop_back</span><span class=special>();</span>
  206. <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>
  207. <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>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>
  208. <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>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>
  209. <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>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>
  210. <span class=keyword>void</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>size_type</span> <span class=identifier>n</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>
  211. <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>
  212. <span class=keyword>void</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>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>
  213. <span class=keyword>void</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>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>
  214. <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>
  215. <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>
  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=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  217. <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>
  218. <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>
  219. <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>
  220. <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>
  221. <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>
  222. <span class=keyword>void</span> <span class=identifier>clear</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  223. <span class=comment>// list operations:</span>
  224. <span class=keyword>void</span> <span class=identifier>splice</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  225. <span class=keyword>void</span> <span class=identifier>splice</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=identifier>iterator</span> <span class=identifier>i</span><span class=special>);</span>
  226. <span class=keyword>void</span> <span class=identifier>splice</span><span class=special>(</span>
  227. <span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</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>
  228. <span class=keyword>void</span> <span class=identifier>remove</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>value_type</span><span class=special>&amp;</span> <span class=identifier>value</span><span class=special>);</span>
  229. <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Predicate</span><span class=special>&gt;</span> <span class=keyword>void</span> <span class=identifier>remove_if</span><span class=special>(</span><span class=identifier>Predicate</span> <span class=identifier>pred</span><span class=special>);</span>
  230. <span class=keyword>void</span> <span class=identifier>unique</span><span class=special>();</span>
  231. <span class=keyword>template</span> <span class=special>&lt;</span><span class=keyword>class</span> <span class=identifier>BinaryPredicate</span><span class=special>&gt;</span>
  232. <span class=keyword>void</span> <span class=identifier>unique</span><span class=special>(</span><span class=identifier>BinaryPredicate</span> <span class=identifier>binary_pred</span><span class=special>);</span>
  233. <span class=keyword>void</span> <span class=identifier>merge</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>);</span>
  234. <span class=keyword>template</span> <span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Compare</span><span class=special>&gt;</span> <span class=keyword>void</span> <span class=identifier>merge</span><span class=special>(</span><b>index class name</b><span class=special>&amp;</span> <span class=identifier>x</span><span class=special>,</span><span class=identifier>Compare</span> <span class=identifier>comp</span><span class=special>);</span>
  235. <span class=keyword>void</span> <span class=identifier>sort</span><span class=special>();</span>
  236. <span class=keyword>template</span> <span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Compare</span><span class=special>&gt;</span> <span class=keyword>void</span> <span class=identifier>sort</span><span class=special>(</span><span class=identifier>Compare</span> <span class=identifier>comp</span><span class=special>);</span>
  237. <span class=keyword>void</span> <span class=identifier>reverse</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
  238. <span class=comment>// rearrange operations:</span>
  239. <span class=keyword>void</span> <span class=identifier>relocate</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</span><span class=special>,</span><span class=identifier>iterator</span> <span class=identifier>i</span><span class=special>);</span>
  240. <span class=keyword>void</span> <span class=identifier>relocate</span><span class=special>(</span><span class=identifier>iterator</span> <span class=identifier>position</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>
  241. <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> <span class=keyword>void</span> <span class=identifier>rearrange</span><span class=special>(</span><span class=identifier>InputIterator</span> <span class=identifier>first</span><span class=special>);</span>
  242. <span class=special>}</span>
  243. <span class=comment>// index comparison:</span>
  244. <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>
  245. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>==(</span>
  246. <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>
  247. <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>
  248. <span class=special>{</span>
  249. <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>
  250. <span class=special>}</span>
  251. <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>
  252. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&lt;(</span>
  253. <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>
  254. <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>
  255. <span class=special>{</span>
  256. <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>
  257. <span class=special>}</span>
  258. <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>
  259. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>!=(</span>
  260. <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>
  261. <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>
  262. <span class=special>{</span>
  263. <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>
  264. <span class=special>}</span>
  265. <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>
  266. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&gt;(</span>
  267. <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>
  268. <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>
  269. <span class=special>{</span>
  270. <span class=keyword>return</span> <span class=identifier>y</span><span class=special>&lt;</span><span class=identifier>x</span><span class=special>;</span>
  271. <span class=special>}</span>
  272. <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>
  273. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&gt;=(</span>
  274. <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>
  275. <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>
  276. <span class=special>{</span>
  277. <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>
  278. <span class=special>}</span>
  279. <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>
  280. <span class=keyword>bool</span> <span class=keyword>operator</span><span class=special>&lt;=(</span>
  281. <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>
  282. <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>
  283. <span class=special>{</span>
  284. <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>
  285. <span class=special>}</span>
  286. <span class=comment>// index specialized algorithms:</span>
  287. <span class=keyword>template</span><span class=special>&lt;</span><b>implementation defined</b><span class=special>&gt;</span>
  288. <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>
  289. <span class=special>}</span> <span class=comment>// namespace boost::multi_index::detail</span>
  290. <span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
  291. <span class=special>}</span> <span class=comment>// namespace boost</span>
  292. </pre></blockquote>
  293. <h4><a name="complexity_signature">Complexity signature</a></h4>
  294. <p>
  295. Here and in the descriptions of operations of sequenced indices, we adopt the
  296. scheme outlined in the
  297. <a href="indices.html#complexity_signature">complexity signature
  298. section</a>. The complexity signature of sequenced indices is:
  299. <ul>
  300. <li>copying: <code>c(n)=n*log(n)</code>,</li>
  301. <li>insertion: <code>i(n)=1</code> (constant),</li>
  302. <li>hinted insertion: <code>h(n)=1</code> (constant),</li>
  303. <li>deletion: <code>d(n)=1</code> (constant),</li>
  304. <li>replacement: <code>r(n)=1</code> (constant),</li>
  305. <li>modifying: <code>m(n)=1</code> (constant).</li>
  306. </ul>
  307. </p>
  308. <h4><a name="instantiation_types">Instantiation types</a></h4>
  309. <p>Sequenced indices are instantiated internally to <code>multi_index_container</code>
  310. and specified by means of <a href="indices.html#indexed_by">
  311. <code>indexed_by</code></a> with the <a href="#sequenced"><code>sequenced</code></a>
  312. index specifier. Instantiations are dependent on the following types:
  313. <ul>
  314. <li><code>Value</code> from <code>multi_index_container</code>,</li>
  315. <li><code>Allocator</code> from <code>multi_index_container</code>,</li>
  316. <li><code>TagList</code> from the index specifier (if provided, otherwise <code>tag&lt;&gt;</code> is assumed).</li>
  317. </ul>
  318. <code>TagList</code> must be an instantiation of
  319. <a href="indices.html#tag"><code>tag</code></a>.
  320. </p>
  321. <h4><a name="constructors">Constructors, copy and assignment</a></h4>
  322. <p>
  323. As explained in the <a href="indices.html#index_concepts">index
  324. concepts section</a>, indices do not have public constructors or destructors.
  325. Assignment, on the other hand, is provided.
  326. </p>
  327. <code><b>index class name</b>&amp; operator=(const <b>index class name</b>&amp; x);</code>
  328. <blockquote>
  329. <b>Effects:</b>
  330. <blockquote><pre>
  331. <span class=identifier>a</span><span class=special>=</span><span class=identifier>b</span><span class=special>;</span>
  332. </pre></blockquote>
  333. where <code>a</code> and <code>b</code> are the <code>multi_index_container</code>
  334. objects to which <code>*this</code> and <code>x</code> belong, respectively.<br>
  335. <b>Returns:</b> <code>*this</code>.<br>
  336. </blockquote>
  337. <code><b>index class name</b>&amp; operator=(std::initializer_list&lt;value_type&gt; list);</code>
  338. <blockquote>
  339. <b>Effects:</b>
  340. <blockquote><pre>
  341. <span class=identifier>a</span><span class=special>=</span><span class=identifier>list</span><span class=special>;</span>
  342. </pre></blockquote>
  343. where <code>a</code> is the <code>multi_index_container</code>
  344. object to which <code>*this</code> belongs.<br>
  345. <b>Returns:</b> <code>*this</code>.<br>
  346. </blockquote>
  347. <code>template &lt;class InputIterator><br>
  348. void assign(InputIterator first,InputIterator last);</code>
  349. <blockquote>
  350. <b>Effects:</b>
  351. <blockquote><pre>
  352. <span class=identifier>clear</span><span class=special>();</span>
  353. <span class=identifier>insert</span><span class=special>(</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>first</span><span class=special>,</span><span class=identifier>last</span><span class=special>);</span>
  354. </pre></blockquote>
  355. </blockquote>
  356. <code>void assign(std::initializer_list&lt;value_type&gt; list);</code>
  357. <blockquote>
  358. <b>Effects:</b>
  359. <blockquote><pre>
  360. <span class=identifier>assign</span><span class=special>(</span><span class=identifier>list</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>list</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
  361. </pre></blockquote>
  362. </blockquote>
  363. <code>void assign(size_type n,const value_type&amp; value);</code>
  364. <blockquote>
  365. <b>Effects:</b>
  366. <blockquote><pre>
  367. <span class=identifier>clear</span><span class=special>();</span>
  368. <span class=keyword>for</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>i</span><span class=special>=</span><span class=number>0</span><span class=special>;</span><span class=identifier>i</span><span class=special>&lt;</span><span class=identifier>n</span><span class=special>;++</span><span class=identifier>n</span><span class=special>)</span><span class=identifier>push_back</span><span class=special>(</span><span class=identifier>v</span><span class=special>);</span>
  369. </pre></blockquote>
  370. </blockquote>
  371. <h4><a name="iterators">Iterators</a></h4>
  372. <code>iterator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iterator_to(const value_type&amp; x);<br>
  373. const_iterator iterator_to(const value_type&amp; x)const;</code>
  374. <blockquote>
  375. <b>Requires:</b> <code>x</code> is a reference to an element of the container.<br>
  376. <b>Returns:</b> An iterator to <code>x</code>.<br>
  377. <b>Complexity:</b> Constant.<br>
  378. <b>Exception safety:</b> <code>nothrow</code>.<br>
  379. </blockquote>
  380. <h4><a name="capacity">Capacity operations</a></h4>
  381. <code>void resize(size_type n);<br>
  382. void resize(size_type n,const value_type&amp; x);</code>
  383. <blockquote>
  384. <b>Requires (first version):</b> <code>value_type</code> is <code>DefaultInsertable</code>
  385. into <code>multi_index_container</code>.<br>
  386. <b>Requires (second version):</b> <code>value_type</code> is <code>CopyInsertable</code>
  387. into <code>multi_index_container</code>.<br>
  388. <b>Effects:</b> If <code>size()&lt;n</code>, tries to append <code>n-size()</code> default-inserted
  389. elements (first version) or copies of <code>x</code> (second version) at the end of
  390. the index. If <code>n&lt;size()</code>, erases the last <code>size()-n</code> elements.<br>
  391. <b>Note:</b> If an expansion is requested, the size of the index is not guaranteed
  392. to be <code>n</code> after this operation (other indices may ban insertions.)
  393. </blockquote>
  394. <h4><a name="modifiers">Modifiers</a></h4>
  395. <code>template&lt;typename... Args&gt;<br>
  396. std::pair&lt;iterator,bool&gt; emplace_front(Args&amp;&amp;... args);</code>
  397. <blockquote>
  398. <b>Effects:</b>
  399. <blockquote><pre>
  400. <span class=identifier>emplace</span><span class=special>(</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>forward</span><span class=special>&lt;</span><span class=identifier>Args</span><span class=special>&gt;(</span><span class=identifier>args</span><span class=special>)...);</span>
  401. </pre></blockquote>
  402. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  403. is <code>true</code> if and only if insertion took place. On successful
  404. insertion, <code>p.first</code> points to the element inserted; otherwise,
  405. <code>p.first</code> points to an element that caused the insertion to be banned.
  406. Note that more than one element can be causing insertion not to be allowed.<br>
  407. </blockquote>
  408. <code>std::pair&lt;iterator,bool> push_front(const value_type&amp; x);</code><br>
  409. <code>std::pair&lt;iterator,bool> push_front(value_type&amp;&amp; x);</code>
  410. <blockquote>
  411. <b>Effects:</b>
  412. <blockquote><pre>
  413. <span class=identifier>insert</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=comment>// lvalue ref version</span>
  414. <span class=identifier>insert</span><span class=special>(</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>move</span><span class=special>(</span><span class=identifier>x</span><span class=special>));</span> <span class=comment>// rvalue ref version</span>
  415. </pre></blockquote>
  416. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  417. is <code>true</code> if and only if insertion took place. On successful
  418. insertion, <code>p.first</code> points to the element inserted; otherwise,
  419. <code>p.first</code> points to an element that caused the insertion to be banned.
  420. Note that more than one element can be causing insertion not to be allowed.<br>
  421. </blockquote>
  422. <code>template&lt;typename... Args&gt;<br>
  423. std::pair&lt;iterator,bool&gt; emplace_back(Args&amp;&amp;... args);</code>
  424. <blockquote>
  425. <b>Effects:</b>
  426. <blockquote><pre>
  427. <span class=identifier>emplace</span><span class=special>(</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>forward</span><span class=special>&lt;</span><span class=identifier>Args</span><span class=special>&gt;(</span><span class=identifier>args</span><span class=special>)...);</span>
  428. </pre></blockquote>
  429. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  430. is <code>true</code> if and only if insertion took place. On successful
  431. insertion, <code>p.first</code> points to the element inserted; otherwise,
  432. <code>p.first</code> points to an element that caused the insertion to be banned.
  433. Note that more than one element can be causing insertion not to be allowed.<br>
  434. </blockquote>
  435. <code>std::pair&lt;iterator,bool> push_back(const value_type&amp; x);</code><br>
  436. <code>std::pair&lt;iterator,bool> push_back(value_type&amp;&amp; x);</code>
  437. <blockquote>
  438. <b>Effects:</b>
  439. <blockquote><pre>
  440. <span class=identifier>insert</span><span class=special>(</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>x</span><span class=special>);</span> <span class=comment>// lvalue ref version</span>
  441. <span class=identifier>insert</span><span class=special>(</span><span class=identifier>end</span><span class=special>(),</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>move</span><span class=special>(</span><span class=identifier>x</span><span class=special>));</span> <span class=comment>// rvalue ref version</span>
  442. </pre></blockquote>
  443. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  444. is <code>true</code> if and only if insertion took place. On successful
  445. insertion, <code>p.first</code> points to the element inserted; otherwise,
  446. <code>p.first</code> points to an element that caused the insertion to be banned.
  447. Note that more than one element can be causing insertion not to be allowed.<br>
  448. </blockquote>
  449. <code>template&lt;typename... Args&gt;<br>
  450. std::pair&lt;iterator,bool&gt; emplace(iterator position,Args&amp;&amp;... args);</code>
  451. <blockquote>
  452. <b>Requires:</b> <code>value_type</code> is <code>EmplaceConstructible</code>
  453. into <code>multi_index_container</code> from <code>args</code>.<br>
  454. <b>Effects:</b> Inserts a <code>value_type</code> object constructed with
  455. <code>std::forward&lt;Args&gt;(args)...</code> before <code>position</code> if insertion
  456. is allowed by all other indices of the <code>multi_index_container</code>.<br>
  457. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  458. is <code>true</code> if and only if insertion took place. On successful insertion,
  459. <code>p.first</code> points to the element inserted; otherwise, <code>p.first</code>
  460. points to an element that caused the insertion to be banned. Note that more than
  461. one element can be causing insertion not to be allowed.<br>
  462. <b>Complexity:</b> <code>O(I(n))</code>.<br>
  463. <b>Exception safety:</b> Strong.<br>
  464. </blockquote>
  465. <code>std::pair&lt;iterator,bool> insert(iterator position,const value_type&amp; x);</code><br>
  466. <code>std::pair&lt;iterator,bool> insert(iterator position,value_type&amp;&amp; x);</code>
  467. <blockquote>
  468. <b>Requires (first version):</b> <code>value_type</code> is <code>CopyInsertable</code>
  469. into <code>multi_index_container</code>.
  470. <code>position</code> is a valid iterator of the index.<br>
  471. <b>Requires (second version):</b> <code>value_type</code> is <code>MoveInsertable</code>
  472. into <code>multi_index_container</code>.
  473. <code>position</code> is a valid iterator of the index.<br>
  474. <b>Effects:</b> Inserts <code>x</code> before <code>position</code> if insertion
  475. is allowed by all other indices of the <code>multi_index_container</code>.<br>
  476. <b>Returns:</b> The return value is a pair <code>p</code>. <code>p.second</code>
  477. is <code>true</code> if and only if insertion took place. On successful
  478. insertion, <code>p.first</code> points to the element inserted; otherwise,
  479. <code>p.first</code> points to an element that caused the insertion to be banned.
  480. Note that more than one element can be causing insertion not to be allowed.<br>
  481. <b>Complexity:</b> <code>O(I(n))</code>.<br>
  482. <b>Exception safety:</b> Strong.
  483. </blockquote>
  484. <code>void insert(iterator position,size_type n,const value_type&amp; x);</code>
  485. <blockquote>
  486. <b>Effects:</b>
  487. <blockquote><pre>
  488. <span class=keyword>for</span><span class=special>(</span><span class=identifier>size_type</span> <span class=identifier>i</span><span class=special>=</span><span class=number>0</span><span class=special>;</span><span class=identifier>i</span><span class=special>&lt;</span><span class=identifier>n</span><span class=special>;++</span><span class=identifier>i</span><span class=special>)</span><span class=identifier>insert</span><span class=special>(</span><span class=identifier>position</span><span class=special>,</span><span class=identifier>x</span><span class=special>);</span>
  489. </pre></blockquote>
  490. </blockquote>
  491. <code>template&lt;typename InputIterator><br>
  492. void insert(iterator position,InputIterator first,InputIterator last);</code>
  493. <blockquote>
  494. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  495. <code>InputIterator</code> is an input iterator.
  496. <code>value_type</code> is
  497. <code>EmplaceConstructible</code> into
  498. <code>multi_index_container</code> from <code>*first</code>.
  499. <code>first</code> and <code>last</code> are not iterators into any
  500. index of the <code>multi_index_container</code> to which this index belongs.
  501. <code>last</code> is reachable from <code>first</code>.<br>
  502. <b>Effects:</b>
  503. For each element of [<code>first</code>, <code>last</code>), in this
  504. order, inserts it before <code>position</code> if insertion is allowed by all
  505. other indices of the <code>multi_index_container</code>.<br>
  506. <b>Complexity:</b> <code>O(m*I(n+m))</code>, where <code>m</code> is the
  507. number of elements in [<code>first</code>,<code>last</code>).<br>
  508. <b>Exception safety:</b> Basic.
  509. </blockquote>
  510. <code>void insert(iterator position,std::initializer_list&lt;value_type&gt; list);</code>
  511. <blockquote>
  512. <b>Effects:</b>
  513. <blockquote><pre>
  514. <span class=identifier>insert</span><span class=special>(</span><span class=identifier>position</span><span class=special>,</span><span class=identifier>list</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>list</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
  515. </pre></blockquote>
  516. </blockquote>
  517. <code>iterator erase(iterator position);</code>
  518. <blockquote>
  519. <b>Requires:</b> <code>position</code> is a valid dereferenceable iterator
  520. of the index.<br>
  521. <b>Effects:</b> Deletes the element pointed to by <code>position</code>.<br>
  522. <b>Returns:</b> An iterator pointing to the element immediately following
  523. the one that was deleted, or <code>end()</code>
  524. if no such element exists.<br>
  525. <b>Complexity:</b> <code>O(D(n))</code>.<br>
  526. <b>Exception safety:</b> <code>nothrow</code>.<br>
  527. </blockquote>
  528. <code>iterator erase(iterator first,iterator last);</code>
  529. <blockquote>
  530. <b>Requires:</b> [<code>first</code>,<code>last</code>) is a valid
  531. range of the index.<br>
  532. <b>Effects:</b> Deletes the elements in [<code>first</code>,<code>last</code>).<br>
  533. <b>Returns:</b> <code>last</code>.<br>
  534. <b>Complexity:</b> <code>O(m*D(n))</code>, where <code>m</code> is
  535. the number of elements in [<code>first</code>,<code>last</code>).<br>
  536. <b>Exception safety:</b> <code>nothrow</code>.<br>
  537. </blockquote>
  538. <a name="replace"><code>bool replace(iterator position,const value_type&amp; x);</code></a><br>
  539. <code>bool replace(iterator position,value_type&amp;&amp; x);</code>
  540. <blockquote>
  541. <b>Requires (first version):</b> <code>value_type</code> is <code>CopyAssignable</code>.
  542. <code>position</code> is a valid dereferenceable iterator of the index.<br>
  543. <b>Requires (second version):</b> <code>value_type</code> is <code>MoveAssignable</code>.
  544. <code>position</code> is a valid dereferenceable iterator of the index.<br>
  545. <b>Effects:</b> Assigns the value <code>x</code> to the element pointed
  546. to by <code>position</code> into the <code>multi_index_container</code> to which
  547. the index belongs if replacing is allowed by all other indices of the
  548. <code>multi_index_container</code>.<br>
  549. <b>Postconditions:</b> Validity of <code>position</code> is preserved
  550. in all cases.<br>
  551. <b>Returns:</b> <code>true</code> if the replacement took place,
  552. <code>false</code> otherwise.<br>
  553. <b>Complexity:</b> <code>O(R(n))</code>.<br>
  554. <b>Exception safety:</b> Strong. If an exception is thrown by some
  555. user-provided operation the <code>multi_index_container</code> to which the index
  556. belongs remains in its original state.
  557. </blockquote>
  558. <a name="modify">
  559. <code>template&lt;typename Modifier> bool modify(iterator position,Modifier mod);</code></a>
  560. <blockquote>
  561. <b>Requires:</b> <code>mod</code> is a unary function object
  562. accepting arguments of type
  563. <code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
  564. iterator of the index.
  565. The execution of <code>mod(e)</code>, where <code>e</code> is the element
  566. pointed to by <code>position</code>, does not invoke any operation of the
  567. <code>multi_index_container</code> after <code>e</code> is directly modified
  568. or, before modification, if the operation would invalidate <code>position</code>.<br>
  569. <b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
  570. pointed to by <code>position</code> and rearranges <code>*position</code> into
  571. all the indices of the <code>multi_index_container</code>. Rearrangement on sequenced
  572. indices does not change the position of the element with respect to the index;
  573. rearrangement on other indices may or might not succeed. If the rearrangement
  574. fails, the element is erased.<br>
  575. <b>Postconditions:</b> Validity of <code>position</code> is preserved if the
  576. operation succeeds.<br>
  577. <b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
  578. otherwise.<br>
  579. <b>Complexity:</b> <code>O(M(n))</code>.<br>
  580. <b>Exception safety:</b> Basic. If an exception is thrown by some
  581. user-provided operation (including <code>mod</code>), then
  582. the element pointed to by <code>position</code> is erased.
  583. </blockquote>
  584. <code>template&lt;typename Modifier,typename Rollback><br>
  585. bool modify(iterator position,Modifier mod,Rollback back);</code>
  586. <blockquote>
  587. <b>Requires:</b> <code>mod</code> and <code>back</code> are unary function
  588. objects accepting arguments of type
  589. <code>value_type&amp;</code>. <code>position</code> is a valid dereferenceable
  590. iterator of the index.
  591. The execution of <code>mod(e)</code>, where <code>e</code> is the element
  592. pointed to by <code>position</code>, does not invoke any operation of the
  593. <code>multi_index_container</code> after <code>e</code> is directly modified
  594. or, before modification, if the operation would invalidate <code>position</code>.
  595. <code>back(e)</code> does not invoke any operation of the
  596. <code>multi_index_container</code>.<br>
  597. <b>Effects:</b> Calls <code>mod(e)</code> where <code>e</code> is the element
  598. pointed to by <code>position</code> and tries to rearrange <code>*position</code> into
  599. all the indices of the <code>multi_index_container</code>. Rearrangement on sequenced
  600. indices does not change the position of the element with respect to the index;
  601. rearrangement on other indices may or might not succeed.
  602. If the rearrangement fails, <code>back(e)</code> is invoked: if the resulting value
  603. of <code>e</code> is consistent with its original position and constraints in all
  604. indices, the element is kept, otherwise it is erased.<br>
  605. <b>Postconditions:</b> Validity of <code>position</code> is preserved except if
  606. the element is erased under the conditions described below.<br>
  607. <b>Returns:</b> <code>true</code> if the operation succeeded, <code>false</code>
  608. otherwise.<br>
  609. <b>Complexity:</b> <code>O(M(n))</code>.<br>
  610. <b>Exception safety:</b> Strong, except if <code>mod</code> or <code>back</code> throw an
  611. exception or <code>back(e)</code> fails to properly restore the element or there is
  612. a throwing user-provided operation after invoking <code>back(e)</code>, in which cases
  613. the modified element is erased. If <code>back</code>
  614. throws inside the handling code executing after some other user-provided
  615. operation has thrown, it is the exception generated by <code>back</code> that
  616. is rethrown.
  617. </blockquote>
  618. <h4><a name="list_operations">List operations</a></h4>
  619. <p>
  620. Sequenced indices provide the full set of list operations found in
  621. <code>std::list</code>; the semantics of these member functions, however,
  622. differ from that of <code>std::list</code> in some cases as insertions
  623. might not succeed due to banning by other indices. Similarly, the complexity
  624. of the operations may depend on the other indices belonging to the
  625. same <code>multi_index_container</code>.
  626. </p>
  627. <code>void splice(iterator position,<b>index class name</b>&amp; x);</code>
  628. <blockquote>
  629. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  630. <code>&amp;x!=this</code>.<br>
  631. <b>Effects:</b> Inserts the contents of <code>x</code> before <code>position</code>,
  632. in the same order as they were in <code>x</code>. Those elements successfully
  633. inserted are erased from <code>x</code>.<br>
  634. <b>Complexity:</b> <code>O(x.size()*I(n+x.size()) + x.size()*D(x.size()))</code>.<br>
  635. <b>Exception safety:</b> Basic.<br>
  636. </blockquote>
  637. <code>void splice(iterator position,<b>index class name</b>&amp; x,iterator i);</code>
  638. <blockquote>
  639. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  640. <code>i</code> is a valid dereferenceable iterator <code>x</code>.<br>
  641. <b>Effects:</b> Inserts the element pointed to by <code>i</code> before
  642. <code>position</code>: if insertion is successful, the element is erased from
  643. <code>x</code>. In the special case <code>&amp;x==this</code>, no copy or
  644. deletion is performed, and the operation is always successful. If
  645. <code>position==i</code>, no operation is performed.<br>
  646. <b>Postconditions:</b> If <code>&amp;x==this</code>, no iterator or reference
  647. is invalidated.<br>
  648. <b>Complexity:</b> If <code>&amp;x==this</code>, constant; otherwise
  649. <code>O(I(n) + D(n))</code>.<br>
  650. <b>Exception safety:</b> If <code>&amp;x==this</code>, <code>nothrow</code>;
  651. otherwise, strong.<br>
  652. </blockquote>
  653. <code>void splice(iterator position,<b>index class name&amp;</b> x,iterator first,iterator last);</code>
  654. <blockquote>
  655. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  656. <code>first</code> and <code>last</code> are valid iterators of <code>x</code>.
  657. <code>last</code> is reachable from <code>first</code>. <code>position</code>
  658. is not in the range [<code>first</code>,<code>last</code>).<br>
  659. <b>Effects:</b> For each element in the range [<code>first</code>,<code>last</code>),
  660. insertion is tried before <code>position</code>; if the operation is successful,
  661. the element is erased from <code>x</code>. In the special case
  662. <code>&amp;x==this</code>, no copy or deletion is performed, and insertions are
  663. always successful.<br>
  664. <b>Postconditions:</b> If <code>&amp;x==this</code>, no iterator or reference
  665. is invalidated.<br>
  666. <b>Complexity:</b> If <code>&amp;x==this</code>, constant; otherwise
  667. <code>O(m*I(n+m) + m*D(x.size()))</code> where <code>m</code> is the number
  668. of elements in [<code>first</code>,<code>last</code>).<br>
  669. <b>Exception safety:</b> If <code>&amp;x==this</code>, <code>nothrow</code>;
  670. otherwise, basic.<br>
  671. </blockquote>
  672. <code>void remove(const value_type&amp; value);</code>
  673. <blockquote>
  674. <b>Effects:</b> Erases all elements of the index which compare equal to
  675. <code>value</code>.<br>
  676. <b>Complexity:</b> <code>O(n + m*D(n))</code>, where <code>m</code>
  677. is the number of elements erased.<br>
  678. <b>Exception safety:</b> Basic.
  679. </blockquote>
  680. <code>template&lt;typename Predicate> void remove_if(Predicate pred);</code>
  681. <blockquote>
  682. <b>Effects:</b> Erases all elements <code>x</code> of the index for which
  683. <code>pred(x)</code> holds.<br>
  684. <b>Complexity:</b> <code>O(n + m*D(n))</code>, where <code>m</code>
  685. is the number of elements erased.<br>
  686. <b>Exception safety:</b> Basic.
  687. </blockquote>
  688. <code>void unique();</code>
  689. <blockquote>
  690. <b>Effects:</b> Eliminates all but the first element from every consecutive
  691. group of equal elements referred to by the iterator <code>i</code> in the range
  692. [<code>first+1</code>,<code>last</code>) for which <code>*i==*(i-1)</code>.<br>
  693. <b>Complexity:</b> <code>O(n + m*D(n))</code>, where <code>m</code>
  694. is the number of elements erased.<br>
  695. <b>Exception safety:</b> Basic.
  696. </blockquote>
  697. <code>template &lt;class BinaryPredicate> void unique(BinaryPredicate binary_pred);</code>
  698. <blockquote>
  699. <b>Effects:</b> Eliminates all but the first element from every consecutive
  700. group of elements referred to by the iterator <code>i</code> in the range
  701. [<code>first+1</code>,<code>last</code>) for which
  702. <code>binary_pred(*i,*(i-1))</code> holds.<br>
  703. <b>Complexity:</b> <code>O(n + m*D(n))</code>, where <code>m</code>
  704. is the number of elements erased.<br>
  705. <b>Exception safety:</b> Basic.
  706. </blockquote>
  707. <code>void merge(index class name&amp; x);</code>
  708. <blockquote>
  709. <b>Requires:</b> <code>std::less&lt;value_type&gt;</code> induces a
  710. strict weak ordering over <code>value_type</code>.
  711. Both the index and <code>x</code> are sorted according to
  712. <code>std::less&lt;value_type&gt;</code>.<br>
  713. <b>Effects:</b> Attempts to insert every element of <code>x</code> into the
  714. corresponding position of the index (according to the order). Elements
  715. successfully inserted are erased from <code>x</code>. The resulting sequence
  716. is stable, i.e. equivalent elements of either container preserve their
  717. relative position. In the special case <code>&amp;x==this</code>, no operation
  718. is performed.<br>
  719. <b>Postconditions:</b> Elements in the index and remaining elements in
  720. <code>x</code> are sorted.
  721. Validity of iterators to the index and of non-erased elements of <code>x</code>
  722. references is preserved.<br>
  723. <b>Complexity:</b> If <code>&amp;x==this</code>, constant; otherwise
  724. <code>O(n + x.size()*I(n+x.size()) + x.size()*D(x.size()))</code>.<br>
  725. <b>Exception safety:</b> If <code>&amp;x==this</code>, <code>nothrow</code>;
  726. otherwise, basic.<br>
  727. </blockquote>
  728. <code>template &lt;typename Compare&gt; void merge(index class name&amp; x,Compare comp);</code>
  729. <blockquote>
  730. <b>Requires:</b> <code>Compare</code> induces a
  731. strict weak ordering over <code>value_type</code>.
  732. Both the index and <code>x</code> are sorted according to <code>comp</code>.<br>
  733. <b>Effects:</b> Attempts to insert every element of <code>x</code> into the
  734. corresponding position of the index (according to <code>comp</code>).
  735. Elements successfully inserted are erased from <code>x</code>. The resulting
  736. sequence is stable, i.e. equivalent elements of either container preserve
  737. their relative position. In the special case <code>&amp;x==this</code>, no
  738. operation is performed.<br>
  739. <b>Postconditions:</b> Elements in the index and remaining elements in
  740. <code>x</code> are sorted according to <code>comp</code>.
  741. Validity of iterators to the index and of non-erased elements of <code>x</code>
  742. references is preserved.<br>
  743. <b>Complexity:</b> If <code>&amp;x==this</code>, constant; otherwise
  744. <code>O(n + x.size()*I(n+x.size()) + x.size()*D(x.size()))</code>.<br>
  745. <b>Exception safety:</b> If <code>&amp;x==this</code>, <code>nothrow</code>;
  746. otherwise, basic.<br>
  747. </blockquote>
  748. <code>void sort();</code>
  749. <blockquote>
  750. <b>Requires:</b> <code>std::less&lt;value_type&gt;</code> induces a
  751. strict weark ordering over <code>value_type</code>.<br>
  752. <b>Effects:</b> Sorts the index according to
  753. <code>std::less&lt;value_type&gt;</code>. The sorting is stable, i.e.
  754. equivalent elements preserve their relative position.<br>
  755. <b>Postconditions:</b> Validity of iterators and references is preserved.<br>
  756. <b>Complexity:</b> <code>O(n*log(n))</code>.<br>
  757. <b>Exception safety:</b> <code>nothrow</code> if
  758. <code>std::less&lt;value_type&gt;</code> does not throw; otherwise, basic.
  759. </blockquote>
  760. <code>template &lt;typename Compare&gt; void sort(Compare comp);</code>
  761. <blockquote>
  762. <b>Requires:</b> <code>Compare</code> induces a
  763. strict weak ordering over <code>value_type</code>.<br>
  764. <b>Effects:</b> Sorts the index according to <code>comp</code>. The sorting
  765. is stable, i.e. equivalent elements preserve their relative position.<br>
  766. <b>Postconditions:</b> Validity of iterators and references is preserved.<br>
  767. <b>Complexity:</b> <code>O(n*log(n))</code>.<br>
  768. <b>Exception safety:</b> <code>nothrow</code> if <code>comp</code> does
  769. not throw; otherwise, basic.
  770. </blockquote>
  771. <code>void reverse()noexcept;</code>
  772. <blockquote>
  773. <b>Effects:</b> Reverses the order of the elements in the index.<br>
  774. <b>Postconditions:</b> Validity of iterators and references is preserved.<br>
  775. <b>Complexity:</b> <code>O(n)</code>.<br>
  776. </blockquote>
  777. <h4><a name="rearrange_operations">Rearrange operations</a></h4>
  778. <p>
  779. These operations, without counterpart in <code>std::list</code>
  780. (although <code>splice</code> provides partially overlapping
  781. functionality), perform individual and global repositioning of elements
  782. inside the index.
  783. </p>
  784. <code>void relocate(iterator position,iterator i);</code>
  785. <blockquote>
  786. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  787. <code>i</code> is a valid dereferenceable iterator of the index.<br>
  788. <b>Effects:</b> Inserts the element pointed to by <code>i</code> before
  789. <code>position</code>. If <code>position==i</code>, no operation is
  790. performed.<br>
  791. <b>Postconditions:</b> No iterator or reference is invalidated.<br>
  792. <b>Complexity:</b> Constant.<br>
  793. <b>Exception safety:</b> <code>nothrow</code>.<br>
  794. </blockquote>
  795. <code>void relocate(iterator position,iterator first,iterator last);</code>
  796. <blockquote>
  797. <b>Requires:</b> <code>position</code> is a valid iterator of the index.
  798. <code>first</code> and <code>last</code> are valid iterators of the index.
  799. <code>last</code> is reachable from <code>first</code>. <code>position</code>
  800. is not in the range [<code>first</code>,<code>last</code>).<br>
  801. <b>Effects:</b> The range of elements [<code>first</code>,<code>last</code>)
  802. is repositioned just before <code>position</code>.<br>
  803. <b>Postconditions:</b> No iterator or reference is invalidated.<br>
  804. <b>Complexity:</b> Constant.<br>
  805. <b>Exception safety:</b> <code>nothrow</code>.<br>
  806. </blockquote>
  807. <a name="rearrange"><code>template&lt;typename InputIterator> void rearrange(InputIterator first);</code></a>
  808. <blockquote>
  809. <b>Requires:</b> The range [<code>first</code>,
  810. <code>std::advance(first,n)</code>),
  811. where <code>n</code> is the size of the index, is a
  812. <a href="indices.html#views">free view</a> of the index.<br>
  813. <b>Effects:</b> The elements are rearranged so as to match the
  814. order of the previously described view.<br>
  815. <b>Postconditions:</b> No iterator or reference is invalidated.<br>
  816. <b>Complexity:</b> <code>O(n)</code>.<br>
  817. <b>Exception safety:</b> Basic.<br>
  818. </blockquote>
  819. <h4><a name="serialization">Serialization</a></h4>
  820. <p>
  821. Indices cannot be serialized on their own, but only as part of the
  822. <code>multi_index_container</code> into which they are embedded. In describing
  823. the additional preconditions and guarantees associated to sequenced indices
  824. with respect to serialization of their embedding containers, we
  825. use the concepts defined in the <code>multi_index_container</code>
  826. <a href="multi_index_container.html#serialization">serialization section</a>.
  827. </p>
  828. Operation: saving of a <code>multi_index_container</code> <code>m</code> to an
  829. output archive (XML archive) <code>ar</code>.
  830. <blockquote>
  831. <b>Requires:</b> No additional requirements to those imposed by the container.
  832. </blockquote>
  833. Operation: loading of a <code>multi_index_container</code> <code>m'</code> from an
  834. input archive (XML archive) <code>ar</code>.
  835. <blockquote>
  836. <b>Requires:</b> No additional requirements to those imposed by the container.<br>
  837. <b>Postconditions:</b> On successful loading, each of the elements of
  838. [<code>begin()</code>, <code>end()</code>) is a restored copy of the corresponding
  839. element in [<code>m.get&lt;i&gt;().begin()</code>, <code>m.get&lt;i&gt;().end()</code>),
  840. where <code>i</code> is the position of the sequenced index in the container.
  841. </blockquote>
  842. Operation: saving of an <code>iterator</code> or <code>const_iterator</code>
  843. <code>it</code> to an output archive (XML archive) <code>ar</code>.
  844. <blockquote>
  845. <b>Requires:</b> <code>it</code> is a valid iterator of the index. The associated
  846. <code>multi_index_container</code> has been previously saved.
  847. </blockquote>
  848. Operation: loading of an <code>iterator</code> or <code>const_iterator</code>
  849. <code>it'</code> from an input archive (XML archive) <code>ar</code>.
  850. <blockquote>
  851. <b>Postconditions:</b> On successful loading, if <code>it</code> was dereferenceable
  852. then <code>*it'</code> is the restored copy of <code>*it</code>, otherwise
  853. <code>it'==end()</code>.<br>
  854. <b>Note:</b> It is allowed that <code>it</code> be a <code>const_iterator</code>
  855. and the restored <code>it'</code> an <code>iterator</code>, or viceversa.
  856. </blockquote>
  857. <hr>
  858. <div class="prev_link"><a href="hash_indices.html"><img src="../prev.gif" alt="hashed indices" border="0"><br>
  859. Hashed indices
  860. </a></div>
  861. <div class="up_link"><a href="index.html"><img src="../up.gif" alt="Boost.MultiIndex reference" border="0"><br>
  862. Boost.MultiIndex reference
  863. </a></div>
  864. <div class="next_link"><a href="rnd_indices.html"><img src="../next.gif" alt="random access indices" border="0"><br>
  865. Random access indices
  866. </a></div><br clear="all" style="clear: all;">
  867. <br>
  868. <p>Revised December 29th 2018</p>
  869. <p>&copy; Copyright 2003-2018 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
  870. Distributed under the Boost Software
  871. License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
  872. LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
  873. http://www.boost.org/LICENSE_1_0.txt</a>)
  874. </p>
  875. </body>
  876. </html>