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