• 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 - multi_index_container reference</title>
7<link rel="stylesheet" href="../style.css" type="text/css">
8<link rel="start" href="../index.html">
9<link rel="prev" href="index.html">
10<link rel="up" href="index.html">
11<link rel="next" href="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
17<code>multi_index_container</code> reference</h1>
18
19<div class="prev_link"><a href="index.html"><img src="../prev.gif" alt="Boost.MultiIndex reference" border="0"><br>
20Boost.MultiIndex reference
21</a></div>
22<div class="up_link"><a href="index.html"><img src="../up.gif" alt="Boost.MultiIndex reference" border="0"><br>
23Boost.MultiIndex reference
24</a></div>
25<div class="next_link"><a href="indices.html"><img src="../next.gif" alt="index reference" border="0"><br>
26Index reference
27</a></div><br clear="all" style="clear: all;">
28
29<hr>
30
31<h2>Contents</h2>
32
33<ul>
34  <li><a href="#multi_index_container_fwd_synopsis">Header
35    <code>"boost/multi_index_container_fwd.hpp"</code> synopsis</a></li>
36  <li><a href="#synopsis">Header
37    <code>"boost/multi_index_container.hpp"</code> synopsis</a>
38    <ul>
39      <li><a href="#multi_index_container">Class template <code>multi_index_container</code></a>
40        <ul>
41          <li><a href="#complexity">Complexity</a></li>
42          <li><a href="#instantiation_types">Instantiation types</a></li>
43          <li><a href="#types">Nested types</a></li>
44          <li><a href="#nested_templates">Nested class templates</a></li>
45          <li><a href="#constructors">Constructors, copy and assignment</a></li>
46          <li><a href="#index_retrieval">Index retrieval operations</a></li>
47          <li><a href="#projection">Projection operations</a></li>
48          <li><a href="#serialization">Serialization</a></li>
49        </ul>
50      </li>
51    </ul>
52  </li>
53</ul>
54
55<h2>
56<a name="multi_index_container_fwd_synopsis">Header
57<a href="../../../../boost/multi_index_container_fwd.hpp"><code>"boost/multi_index_container_fwd.hpp"</code></a>
58synopsis</a>
59</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=keyword>template</span><span class=special>&lt;</span>
67  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span>
68  <span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>=</span><span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=special>&gt;</span> <span class=special>&gt;,</span>
69  <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>=</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=special>&gt;</span>
70<span class=keyword>class</span> <span class=identifier>multi_index_container</span><span class=special>;</span>
71
72<span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
73
74<span class=keyword>using</span> <span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>multi_index_container</span><span class=special>;</span>
75
76<span class=special>}</span> <span class=comment>// namespace boost</span>
77</pre></blockquote>
78
79<p>
80<code>multi_index_container_fwd.hpp</code> forward declares the class template
81<a href="#multi_index_container"><code>multi_index_container</code></a> and specifies its default parameters.
82</p>
83
84<h2>
85<a name="synopsis">Header
86<a href="../../../../boost/multi_index_container.hpp"><code>"boost/multi_index_container.hpp"</code></a>
87synopsis</a>
88</h2>
89
90<blockquote><pre>
91<span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>initializer_list</span><span class=special>&gt;</span>
92
93<span class=keyword>namespace</span> <span class=identifier>boost</span><span class=special>{</span>
94
95<span class=keyword>namespace</span> <span class=identifier>multi_index</span><span class=special>{</span>
96
97<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>&gt;</span>
98<span class=keyword>class</span> <span class=identifier>multi_index_container</span><span class=special>;</span>
99
100<span class=comment>// multi_index_container associated global class templates:</span>
101
102<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>nth_index</span><span class=special>;</span>
103<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>index</span><span class=special>;</span>
104
105<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
106<span class=keyword>struct</span> <span class=identifier>nth_index_iterator</span><span class=special>;</span>                          <span class=comment><b>// deprecated</b></span>
107<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
108<span class=keyword>struct</span> <span class=identifier>nth_index_const_iterator</span><span class=special>;</span>                    <span class=comment><b>// deprecated</b></span>
109<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
110<span class=keyword>struct</span> <span class=identifier>index_iterator</span><span class=special>;</span>                              <span class=comment><b>// deprecated</b></span>
111<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
112<span class=keyword>struct</span> <span class=identifier>index_const_iterator</span><span class=special>;</span>                        <span class=comment><b>// deprecated</b></span>
113
114<span class=comment>// multi_index_container global functions for index retrieval:</span>
115
116<span class=keyword>template</span><span class=special>&lt;</span>
117  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
118<span class=special>&gt;</span>
119<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
120  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
121<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
122<span class=identifier>get</span><span class=special>(</span><span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span><span class=special>;</span>
123
124<span class=keyword>template</span><span class=special>&lt;</span>
125  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
126<span class=special>&gt;</span>
127<span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
128  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
129<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
130<span class=identifier>get</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span><span class=special>;</span>
131
132<span class=keyword>template</span><span class=special>&lt;</span>
133  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
134<span class=special>&gt;</span>
135<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
136  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
137<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
138<span class=identifier>get</span><span class=special>(</span><span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span><span class=special>;</span>
139
140<span class=keyword>template</span><span class=special>&lt;</span>
141  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
142<span class=special>&gt;</span>
143<span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
144  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
145<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
146<span class=identifier>get</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span><span class=special>;</span>
147
148<span class=comment>// multi_index_container global functions for projection of iterators:</span>
149
150<span class=keyword>template</span><span class=special>&lt;</span>
151  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
152  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
153<span class=special>&gt;</span>
154<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
155  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
156<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span>
157<span class=identifier>project</span><span class=special>(</span>
158  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
159  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
160
161<span class=keyword>template</span><span class=special>&lt;</span>
162  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
163  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
164<span class=special>&gt;</span>
165<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
166  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
167<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span>
168<span class=identifier>project</span><span class=special>(</span>
169  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
170  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
171
172<span class=keyword>template</span><span class=special>&lt;</span>
173  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
174  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
175<span class=special>&gt;</span>
176<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
177  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
178<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span>
179<span class=identifier>project</span><span class=special>(</span>
180  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
181  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
182
183<span class=keyword>template</span><span class=special>&lt;</span>
184  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
185  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
186<span class=special>&gt;</span>
187<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
188  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
189<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span>
190<span class=identifier>project</span><span class=special>(</span>
191  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
192  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
193
194<span class=comment>// comparison:</span>
195
196<span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
197
198<span class=keyword>template</span><span class=special>&lt;</span>
199  <span class=keyword>typename</span> <span class=identifier>Value1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator1</span><span class=special>,</span>
200  <span class=keyword>typename</span> <span class=identifier>Value2</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList2</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator2</span>
201<span class=special>&gt;</span>
202<span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
203  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value1</span><span class=special>,</span><span class=identifier>IndexSpecifierList1</span><span class=special>,</span><span class=identifier>Allocator1</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
204  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value2</span><span class=special>,</span><span class=identifier>IndexSpecifierList2</span><span class=special>,</span><span class=identifier>Allocator2</span><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>);</span>
205
206<span class=comment>// specialized algorithms:</span>
207
208<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>&gt;</span>
209<span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span>
210  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
211  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>);</span>
212
213<span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
214
215<span class=keyword>using</span> <span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>multi_index_container</span><span class=special>;</span>
216<span class=keyword>using</span> <span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>get</span><span class=special>;</span>
217<span class=keyword>using</span> <span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>project</span><span class=special>;</span>
218
219<span class=special>}</span> <span class=comment>// namespace boost</span>
220</pre></blockquote>
221
222<h3><a name="multi_index_container">
223Class template <code>multi_index_container</code>
224</a></h3>
225
226<p>
227This is the main component of Boost.MultiIndex. A <code>multi_index_container</code>
228is a container class template holding a compile-time user-defined list of
229<a href="indices.html">indices</a>. These indices provide different interfaces
230for the management of the elements of the <code>multi_index_container</code>. By itself,
231<code>multi_index_container</code> only provides basic functionality for construction
232and for access to the indices held.
233</p>
234
235<p>
236A <code>multi_index_container</code> type is instantiated with the type of the
237elements contained and a non-empty
238<a href="../../../../libs/mpl/doc/refmanual/forward-sequence.html">
239<code>MPL Forward Sequence</code></a> specifying which indices conform the
240class.
241</p>
242
243<p>
244For convenience of use, all public methods and types of the first index
245specified are inherited by <code>multi_index_container</code>. This also includes global
246operators and functions associated with the index (vg. comparison and
247<code>swap</code>.)
248</p>
249
250<blockquote><pre>
251<span class=keyword>template</span><span class=special>&lt;</span>
252  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span>
253  <span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>=</span><span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=special>&gt;</span> <span class=special>&gt;,</span>
254  <span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>=</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=special>&gt;</span>
255<span class=keyword>class</span> <span class=identifier>multi_index_container</span>
256<span class=special>{</span>
257<span class=keyword>public</span><span class=special>:</span>
258
259  <span class=comment>// types:</span>
260
261  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>ctor_args_list</span><span class=special>;</span>
262  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>index_specifier_type_list</span><span class=special>;</span>
263  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>index_type_list</span><span class=special>;</span>
264  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>iterator_type_list</span><span class=special>;</span>
265  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>const_iterator_type_list</span><span class=special>;</span>
266  <span class=keyword>typedef</span> <span class=identifier>Allocator</span>                <span class=identifier>allocator_type</span><span class=special>;</span>
267  <span class=keyword>typedef</span> <b>implementation defined</b>   <span class=identifier>node_type</span><span class=special>;</span>
268
269  <span class=comment>// nested class templates:</span>
270
271  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
272  <span class=keyword>struct</span> <span class=identifier>nth_index</span>                <span class=special>{</span><span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>type</span><span class=special>;};</span>
273  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
274  <span class=keyword>struct</span> <span class=identifier>index</span>                    <span class=special>{</span><span class=keyword>typedef</span> <b>implementation defined</b> <span class=identifier>type</span><span class=special>;};</span>
275
276  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
277  <span class=keyword>struct</span> <span class=identifier>nth_index_iterator</span>        <span class=comment><b>// deprecated</b></span>
278  <span class=special>{</span><span class=keyword>typedef</span> <b><span class=identifier>implementation</span> <span class=identifier>defined</span></b> <span class=identifier>type</span><span class=special>;};</span>
279  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
280  <span class=keyword>struct</span> <span class=identifier>nth_index_const_iterator</span>  <span class=comment><b>// deprecated</b></span>
281  <span class=special>{</span><span class=keyword>typedef</span> <b><span class=identifier>implementation</span> <span class=identifier>defined</span></b> <span class=identifier>type</span><span class=special>;};</span>
282  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
283  <span class=keyword>struct</span> <span class=identifier>index_iterator</span>            <span class=comment><b>// deprecated</b></span>
284  <span class=special>{</span><span class=keyword>typedef</span> <b><span class=identifier>implementation</span> <span class=identifier>defined</span></b> <span class=identifier>type</span><span class=special>;};</span>
285  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
286  <span class=keyword>struct</span> <span class=identifier>index_const_iterator</span>      <span class=comment><b>// deprecated</b></span>
287  <span class=special>{</span><span class=keyword>typedef</span> <b><span class=identifier>implementation</span> <span class=identifier>defined</span></b> <span class=identifier>type</span><span class=special>;};</span>
288
289  <span class=comment>// construct/copy/destroy:</span>
290
291  <span class=identifier>multi_index_container</span><span class=special>();</span>
292  <span class=keyword>explicit</span> <span class=identifier>multi_index_container</span><span class=special>(
293    </span><span class=keyword>const</span> <span class=identifier>ctor_args_list</span><span class=special>&amp;</span> <span class=identifier>args_list</span><span class=special>,
294    </span><span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>=</span><span class=identifier>allocator_type</span><span class=special>());</span>
295  <span class=keyword>explicit</span> <span class=identifier>multi_index_container</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>);</span>
296  <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>
297  <span class=identifier>multi_index_container</span><span class=special>(</span>
298    <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>
299    <span class=keyword>const</span> <span class=identifier>ctor_args_list</span><span class=special>&amp;</span> <span class=identifier>args_list</span><span class=special>=</span><span class=identifier>ctor_args_list</span><span class=special>(),
300    </span><span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>=</span><span class=identifier>allocator_type</span><span class=special>());</span>
301  <span class=identifier>multi_index_container</span><span class=special>(</span>
302    <span class=identifier>std</span><span class=special>::</span><span class=identifier>initializer_list</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=identifier>list</span><span class=special>,</span>
303    <span class=keyword>const</span> <span class=identifier>ctor_args_list</span><span class=special>&amp;</span> <span class=identifier>args_list</span><span class=special>=</span><span class=identifier>ctor_args_list</span><span class=special>(),</span>
304    <span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>=</span><span class=identifier>allocator_type</span><span class=special>());</span>
305  <span class=identifier>multi_index_container</span><span class=special>(</span>
306    <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
307  <span class=identifier>multi_index_container</span><span class=special>(</span>
308    <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
309  <span class=identifier>multi_index_container</span><span class=special>(</span>
310    <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
311    <span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>);</span>
312  <span class=identifier>multi_index_container</span><span class=special>(</span>
313    <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
314    <span class=keyword>const</span> <span class=identifier>allocator_type</span><span class=special>&amp;</span> <span class=identifier>al</span><span class=special>);</span>
315
316  <span class=special>~</span><span class=identifier>multi_index_container</span><span class=special>();</span>
317
318  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=keyword>operator</span><span class=special>=(</span>
319    <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
320  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=keyword>operator</span><span class=special>=(</span>
321    <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;&amp;</span> <span class=identifier>x</span><span class=special>);</span>
322  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=keyword>operator</span><span class=special>=(</span>
323    <span class=identifier>std</span><span class=special>::</span><span class=identifier>initializer_list</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>&gt;</span> <span class=identifier>list</span><span class=special>)</span>
324
325  <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>
326
327  <span class=comment>// retrieval of indices</span>
328
329  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span> <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span> <span class=identifier>get</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
330  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span> <span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span> <span class=identifier>get</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
331  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span> <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span> <span class=identifier>get</span><span class=special>()</span><span class=keyword>noexcept</span><span class=special>;</span>
332  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span> <span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span> <span class=identifier>get</span><span class=special>()</span><span class=keyword>const</span> <span class=keyword>noexcept</span><span class=special>;</span>
333
334  <span class=comment>// projection of iterators</span>
335
336  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>&gt;</span>
337    <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span> <span class=identifier>project</span><span class=special>(</span><span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
338  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>&gt;</span>
339    <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span> <span class=identifier>project</span><span class=special>(</span><span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
340  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>&gt;</span>
341    <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span> <span class=identifier>project</span><span class=special>(</span><span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>);</span>
342  <span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>&gt;</span>
343    <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span> <span class=identifier>project</span><span class=special>(</span><span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span><span class=keyword>const</span><span class=special>;</span>
344<span class=special>};</span>
345
346<span class=comment>// multi_index_container associated global class templates:</span>
347
348<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>nth_index</span>
349<span class=special>{</span>
350  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>nth_index</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
351<span class=special>};</span>
352
353<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span> <span class=keyword>struct</span> <span class=identifier>index</span>
354<span class=special>{</span>
355  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>index</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
356<span class=special>};</span>
357
358<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
359<span class=keyword>struct</span> <span class=identifier>nth_index_iterator</span>       <span class=comment><b>// deprecated</b></span>
360<span class=special>{</span>
361  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>nth_index_iterator</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
362<span class=special>};</span>
363
364<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>int</span> <span class=identifier>N</span><span class=special>&gt;</span>
365<span class=keyword>struct</span> <span class=identifier>nth_index_const_iterator</span> <span class=comment><b>// deprecated</b></span>
366<span class=special>{</span>
367  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>nth_index_const_iterator</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
368<span class=special>};</span>
369
370<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
371<span class=keyword>struct</span> <span class=identifier>index_iterator</span>           <span class=comment><b>// deprecated</b></span>
372<span class=special>{</span>
373  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>index_iterator</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
374<span class=special>};</span>
375
376<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>&gt;</span>
377<span class=keyword>struct</span> <span class=identifier>index_const_iterator</span>     <span class=comment><b>// deprecated</b></span>
378<span class=special>{</span>
379  <span class=keyword>typedef</span> <span class=keyword>typename</span> <span class=identifier>MultiIndexContainer</span><span class=special>::</span><span class=identifier>index_const_iterator</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;::</span><span class=identifier>type</span> <span class=identifier>type</span><span class=special>;</span>
380<span class=special>};</span>
381
382<span class=comment>// multi_index_container global functions for index retrieval:</span>
383
384<span class=keyword>template</span><span class=special>&lt;</span>
385  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
386<span class=special>&gt;</span>
387<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
388  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
389<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
390<span class=identifier>get</span><span class=special>(</span><span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span>
391<span class=special>{</span>
392  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=identifier>get</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;();</span>
393<span class=special>}</span>
394
395<span class=keyword>template</span><span class=special>&lt;</span>
396  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
397<span class=special>&gt;</span>
398<span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
399  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
400<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
401<span class=identifier>get</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span>
402<span class=special>{</span>
403  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=identifier>get</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;();</span>
404<span class=special>}</span>
405
406<span class=keyword>template</span><span class=special>&lt;</span>
407  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
408<span class=special>&gt;</span>
409<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
410  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
411<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
412<span class=identifier>get</span><span class=special>(</span><span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span>
413<span class=special>{</span>
414  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=identifier>get</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;();</span>
415<span class=special>}</span>
416
417<span class=keyword>template</span><span class=special>&lt;</span>
418  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
419<span class=special>&gt;</span>
420<span class=keyword>const</span> <span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
421  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
422<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>&amp;</span>
423<span class=identifier>get</span><span class=special>(</span><span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>)</span><span class=keyword>noexcept</span>
424<span class=special>{</span>
425  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=identifier>get</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;();</span>
426<span class=special>}</span>
427
428<span class=comment>// multi_index_container global functions for projection of iterators:</span>
429
430<span class=keyword>template</span><span class=special>&lt;</span>
431  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
432  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
433<span class=special>&gt;</span>
434<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
435  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
436<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span>
437<span class=identifier>project</span><span class=special>(</span>
438  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
439  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span>
440<span class=special>{</span>
441  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=keyword>template</span> <span class=identifier>project</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;(</span><span class=identifier>it</span><span class=special>);</span>
442<span class=special>}</span>
443
444<span class=keyword>template</span><span class=special>&lt;</span>
445  <span class=keyword>int</span> <span class=identifier>N</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
446  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
447<span class=special>&gt;</span>
448<span class=keyword>typename</span> <span class=identifier>nth_index</span><span class=special>&lt;</span>
449  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>N</span>
450<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span>
451<span class=identifier>project</span><span class=special>(</span>
452  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
453  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span>
454<span class=special>{</span>
455  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=keyword>template</span> <span class=identifier>project</span><span class=special>&lt;</span><span class=identifier>N</span><span class=special>&gt;(</span><span class=identifier>it</span><span class=special>);</span>
456<span class=special>}</span>
457
458<span class=keyword>template</span><span class=special>&lt;</span>
459  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
460  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
461<span class=special>&gt;</span>
462<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
463  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
464<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>iterator</span>
465<span class=identifier>project</span><span class=special>(</span>
466  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
467  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span>
468<span class=special>{</span>
469  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=keyword>template</span> <span class=identifier>project</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;(</span><span class=identifier>it</span><span class=special>);</span>
470<span class=special>}</span>
471
472<span class=keyword>template</span><span class=special>&lt;</span>
473  <span class=keyword>typename</span> <span class=identifier>Tag</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IteratorType</span><span class=special>,</span>
474  <span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span>
475<span class=special>&gt;</span>
476<span class=keyword>typename</span> <span class=identifier>index</span><span class=special>&lt;</span>
477  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;,</span><span class=identifier>Tag</span>
478<span class=special>&gt;::</span><span class=identifier>type</span><span class=special>::</span><span class=identifier>const_iterator</span>
479<span class=identifier>project</span><span class=special>(</span>
480  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>m</span><span class=special>,</span>
481  <span class=identifier>IteratorType</span> <span class=identifier>it</span><span class=special>)</span>
482<span class=special>{</span>
483  <span class=keyword>return</span> <span class=identifier>m</span><span class=special>.</span><span class=keyword>template</span> <span class=identifier>project</span><span class=special>&lt;</span><span class=identifier>Tag</span><span class=special>&gt;(</span><span class=identifier>it</span><span class=special>);</span>
484<span class=special>}</span>
485
486<span class=comment>// comparison:</span>
487
488<span class=comment>// <b>OP</b> is any of ==,&lt;,!=,&gt;,&gt;=,&lt;=</span>
489
490<span class=keyword>template</span><span class=special>&lt;</span>
491  <span class=keyword>typename</span> <span class=identifier>Value1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList1</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator1</span><span class=special>,</span>
492  <span class=keyword>typename</span> <span class=identifier>Value2</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList2</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator2</span>
493<span class=special>&gt;</span>
494<span class=keyword>bool</span> <span class=keyword>operator</span> <b><i>OP</i></b><span class=special>(</span>
495  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value1</span><span class=special>,</span><span class=identifier>IndexSpecifierList1</span><span class=special>,</span><span class=identifier>Allocator1</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
496  <span class=keyword>const</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value2</span><span class=special>,</span><span class=identifier>IndexSpecifierList2</span><span class=special>,</span><span class=identifier>Allocator2</span><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
497  <span class=special>{</span>
498    <span class=keyword>return</span> <span class=identifier>get</span><span class=special>&lt;</span><span class=number>0</span><span class=special>&gt;(</span><span class=identifier>x</span><span class=special>)</span> <b><i>OP</i></b> <span class=identifier>get</span><span class=special>&lt;</span><span class=number>0</span><span class=special>&gt;(</span><span class=identifier>y</span><span class=special>);</span>
499  <span class=special>}</span>
500
501<span class=comment>// specialized algorithms:</span>
502
503<span class=keyword>template</span><span class=special>&lt;</span><span class=keyword>typename</span> <span class=identifier>Value</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=keyword>typename</span> <span class=identifier>Allocator</span><span class=special>&gt;</span>
504<span class=keyword>void</span> <span class=identifier>swap</span><span class=special>(</span>
505  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>x</span><span class=special>,</span>
506  <span class=identifier>multi_index_container</span><span class=special>&lt;</span><span class=identifier>Value</span><span class=special>,</span><span class=identifier>IndexSpecifierList</span><span class=special>,</span><span class=identifier>Allocator</span><span class=special>&gt;&amp;</span> <span class=identifier>y</span><span class=special>)</span>
507  <span class=special>{</span>
508    <span class=identifier>x</span><span class=special>.</span><span class=identifier>swap</span><span class=special>(</span><span class=identifier>y</span><span class=special>);</span>
509  <span class=special>}</span>
510
511<span class=special>}</span> <span class=comment>// namespace boost::multi_index</span>
512
513<span class=special>}</span> <span class=comment>// namespace boost</span>
514</pre></blockquote>
515
516<h4><a name="complexity">Complexity</a></h4>
517
518<p>
519In the descriptions of operations of <code>multi_index_container</code>, we adopt the
520scheme outlined in the
521<a href="indices.html#complexity_signature">complexity signature section</a>.
522</p>
523
524<h4><a name="instantiation_types">Instantiation types</a></h4>
525
526<p>
527<code>multi_index_container</code> is instantiated with the following types:
528<ol>
529  <li><code>Value</code> is the type of the elements contained. <code>Value</code> must be
530      <code>Erasable</code> from <code>multi_index_container</code>.
531  </li>
532  <li><code>IndexSpecifierList</code> specifies the indices that the
533    <code>multi_index_container</code> is composed of. It must be a non-empty
534    <a href="../../../../libs/mpl/doc/refmanual/forward-sequence.html">
535    <code>MPL Forward Sequence</code></a> (and, preferrably,
536    an <a href="../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
537    <code>MPL Random Access Sequence</code></a>) of index specifiers. For
538    syntactic convenience, the
539    <a href="indices.html#indexed_by"><code>indexed_by</code></a>
540    MPL sequence can be used.
541  </li>
542  <li><code>Allocator</code> must be an allocator of <code>Value</code> objects
543    satisfying the associated C++ requirements at <b>[allocator.requirements]</b>.
544    The following relaxations to the standard requirements are allowed:
545    <ul>
546      <li>Non-equal allocator instances are supported: swapping two non-equal
547        instances must not throw any exception.
548      </li>
549      <li>For every type <code>T</code>,
550        the type <code>Allocator::rebind&lt;T&gt;::other::pointer</code> can be any
551        kind of random access iterator, provided that it is explicitly constructible from
552        the literal <code>0</code> (standing here as the null pointer) or from any
553        <code>p</code> of type <code>T*</code> pointing into an area allocated by
554        some instance of <code>Allocator</code> or some other allocator type rebound
555        from <code>Allocator</code>. A <code>pointer</code> constructed from
556        <code>p</code> shall dereference to <code>*p</code>.
557      </li>
558    </ul>
559  </li>
560</ol>
561Indices of a given <code>multi_index_container</code> instantiation cannot have
562duplicate <a href="indices.html#tags">tags</a>, either within a single
563index or in two different indices.
564</p>
565
566<p>
567In what follows, the number of indices of the <code>multi_index_container</code>
568is named <code>I</code>.
569</p>
570
571<h4><a name="types">Nested types</a></h4>
572
573<code>ctor_args_list</code>
574
575<blockquote>
576Although the exact definition of <code>ctor_args_list</code> is
577implementation defined, from the user point of view this type can be
578treated as equivalent to
579<code>::boost::tuple&lt;C<sub>0</sub>,...,C<sub>I-1</sub>></code>,
580where <code>C<sub>i</sub></code> is the <code>ctor_args</code> type of the
581<code>i</code>-th index held by the <code>multi_index_container</code>, in the
582same order as they were specified. Strictly speaking, there is an
583implicit conversion from
584<code>const ::boost::tuple&lt;C<sub>0</sub>,...,C<sub>I-1</sub>>&amp;</code>
585to <code>const ctor_args_list&amp;</code>. This type is used for
586providing the construction arguments of the indices of the
587<code>multi_index_container</code>. <code>ctor_args_list</code> is
588<code>DefaultConstructible</code>, provided that all <code>ctor_args</code> types
589involved are <code>DefaultConstructible</code>.
590</blockquote>
591
592<code>index_specifier_type_list</code>
593
594<blockquote>
595Same type as <code>IndexSpecifierList</code>.
596</blockquote>
597
598<code>index_type_list</code>
599
600<blockquote>
601Model of
602<a href="../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
603<code>MPL Random Access Sequence</code></a> and
604<a href="../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
605<code>MPL Extensible Sequence</code></a> containing the types of the indices held by
606the <code>multi_index_container</code>, in the same order as they were specified.
607</blockquote>
608
609<code>iterator_type_list</code>
610
611<blockquote>
612Model of
613<a href="../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
614<code>MPL Random Access Sequence</code></a> and
615<a href="../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
616<code>MPL Extensible Sequence</code></a> containing the types of the iterators of
617the indices held by the <code>multi_index_container</code>, in the same order as they were
618specified.
619</blockquote>
620
621<code>const_iterator_type_list</code>
622
623<blockquote>
624Model of
625<a href="../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
626<code>MPL Random Access Sequence</code></a> and
627<a href="../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
628<code>MPL Extensible Sequence</code></a> containing the types of the constant
629iterators of the indices held by the <code>multi_index_container</code>, in the same order
630as they were specified.
631</blockquote>
632
633<a name="node_type"><code>node_type</code></a>
634
635<blockquote>
636Node handle class following the standard specification at
637<b>[container.node]</b> (version for set containers).
638Two instantiations of <code>multi_index_container</code>
639have compatible nodes (i.e., the same <code>node_type</code>) if and only if
640they are of the form
641<code>multi_index_container&lt;Value,IndexSpecifierList1,Allocator&gt;</code> and
642<code>multi_index_container&lt;Value,IndexSpecifierList2,Allocator&gt;</code>,
643have the same number <code>I</code> of index specifiers, and, for <code>i</code> =
644<code>0</code>, ... , <code>I-1</code>, the respective <code>i</code>-th index specifiers
645refer to the same <a href="indices.html#index_catalog">type of index</a>, regardless
646of unique/non-unique variants and particular configuration type arguments.
647</blockquote>
648
649<h4><a name="nested_templates">Nested class templates</a></h4>
650
651<code>template&lt;int N> struct nth_index</code>
652
653<blockquote>
654<code>nth_index&lt;N>::type</code> yields the type of the
655<code>N</code>-th (0-based) index held by the <code>multi_index_container</code>, in
656the same order as they were specified.<br>
657<b>Requires:</b> <code>0 &lt;= N &lt; I-1</code>.
658</blockquote>
659
660<code>template&lt;typename Tag> struct index</code>
661
662<blockquote>
663<code>index&lt;Tag>::type</code> yields the type of the index which
664has <code>Tag</code> as an associated <a href="indices.html#tags">tag type</a>.<br>
665<b>Requires:</b> Some index of the <code>multi_index_container</code> has <code>Tag</code>
666as an associated tag type.
667</blockquote>
668
669<code>template&lt;int N> struct nth_index_iterator</code>
670
671<blockquote>
672<code>nth_index_iterator&lt;N>::type</code> is equivalent to
673<code>nth_index&lt;N>::type::iterator</code>.<br>
674<b>Note:</b> The use of <code>nth_index_iterator</code> is deprecated.
675</blockquote>
676
677<code>template&lt;int N> struct nth_index_const_iterator</code>
678
679<blockquote>
680<code>nth_index_const_iterator&lt;N>::type</code> is equivalent to
681<code>nth_index&lt;N>::type::const_iterator</code>.<br>
682<b>Note:</b> The use of <code>nth_index_const_iterator</code> is deprecated.
683</blockquote>
684
685<code>template&lt;typename Tag> struct index_iterator</code>
686
687<blockquote>
688<code>index_iterator&lt;Tag>::type</code> is equivalent to
689<code>index&lt;Tag>::type::iterator</code>.<br>
690<b>Note:</b> The use of <code>index_iterator</code> is deprecated.
691</blockquote>
692
693<code>template&lt;typename Tag> struct index_const_iterator</code>
694
695<blockquote>
696<code>index_const_iterator&lt;Tag>::type</code> is equivalent to
697<code>index&lt;Tag>::type::const_iterator</code>.<br>
698<b>Note:</b> The use of <code>index_const_iterator</code> is deprecated.
699</blockquote>
700
701<h4><a name="constructors">Constructors, copy and assignment</a></h4>
702
703<code>multi_index_container();</code>
704
705<blockquote>
706<b>Effects:</b> Constructs an empty <code>multi_index_container</code> using the
707default values of <code>ctor_args_list</code> and <code>allocator_type</code>.<br>
708<b>Complexity:</b> Constant.
709</blockquote>
710
711<code>explicit multi_index_container(<br>
712&nbsp;&nbsp;const ctor_args_list&amp; args_list,<br>
713&nbsp;&nbsp;const allocator_type&amp; al=allocator_type());</code>
714
715<blockquote>
716<b>Effects:</b> Constructs an empty <code>multi_index_container</code> using the
717specified argument list and allocator.<br>
718<b>Complexity:</b> Constant.
719</blockquote>
720
721<code>explicit multi_index_container(const allocator_type&amp; al);</code>
722
723<blockquote>
724<b>Effects:</b> Constructs an empty <code>multi_index_container</code> using the
725specified allocator and the default value of <code>ctor_args_list</code>.<br>
726<b>Complexity:</b> Constant.
727</blockquote>
728
729<code>template&lt;typename InputIterator><br>
730multi_index_container(<br>
731&nbsp;&nbsp;InputIterator first,InputIterator last,<br>
732&nbsp;&nbsp;const ctor_args_list&amp; args_list=ctor_args_list(),<br>
733&nbsp;&nbsp;const allocator_type&amp; al=allocator_type());</code>
734
735<blockquote>
736<b>Requires:</b> <code>InputIterator</code> is an input iterator.
737<code>Value</code> is
738<code>EmplaceConstructible</code> into <code>multi_index_container</code>
739from <code>*first</code>.
740<code>last</code> is reachable from <code>first</code>.<br>
741<b>Effects:</b> Constructs and empty <code>multi_index_container</code> using the
742specified argument list and allocator and fills it with
743the elements in the range [<code>first</code>,<code>last</code>).
744Insertion of each element may or may not succeed depending
745on the acceptance by all the indices of the <code>multi_index_container</code>.<br>
746<b>Complexity:</b> <code>O(m*H(m))</code>, where <code>m</code> is
747the number of elements in [<code>first</code>,<code>last</code>).<br>
748</blockquote>
749
750<code>multi_index_container(<br>
751&nbsp;&nbsp;std::initializer_list&lt;Value&gt; list,<br>
752&nbsp;&nbsp;const ctor_args_list&amp; args_list=ctor_args_list(),<br>
753&nbsp;&nbsp;const allocator_type&amp; al=allocator_type());</code>
754
755<blockquote>
756<b>Effects:</b> Equivalent to
757<code>multi_index_container(list.begin(),list.end(),args_list,al)</code>.
758</blockquote>
759
760<code>multi_index_container(<br>
761&nbsp;&nbsp;const multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; x);</code>
762
763<blockquote>
764<b>Requires:</b> <code>Value</code> is <code>CopyInsertable</code> into
765<code>multi_index_container</code>.<br>
766<b>Effects:</b> Constructs a copy of <code>x</code>, copying its
767elements as well as its internal objects (those specified
768in <code>ctor_args_list</code> and the allocator.)<br>
769<b>Postconditions:</b> <code>*this==x</code>. The order on every index
770of the <code>multi_index_container</code> is preserved as well.<br>
771<b>Complexity:</b> <code>O(x.size()*log(x.size()) + C(x.size()))</code>.
772</blockquote>
773
774<code>multi_index_container(<br>
775&nbsp;&nbsp;multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp;&amp; x);</code>
776
777<blockquote>
778<b>Effects:</b> Constructs a <code>multi_index_container</code> by transferring the
779elements of <code>x</code> and copying its internal objects (those specified
780in <code>ctor_args_list</code> and the allocator.)<br>
781<b>Postconditions:</b> If <code>x==y</code> just
782before the movement, <code>*this==y</code>. The order on every index
783of the <code>multi_index_container</code> is preserved as well.<br>
784<b>Complexity:</b> Constant.
785</blockquote>
786
787<code>multi_index_container(<br>
788&nbsp;&nbsp;const multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; x,<br>
789&nbsp;&nbsp;const allocator_type&amp; al);</code>
790
791<blockquote>
792<b>Requires:</b> <code>Value</code> is <code>CopyInsertable</code> into
793<code>multi_index_container</code>.<br>
794<b>Effects:</b> Constructs a copy of <code>x</code>, copying its
795elements and its internal objects (those specified
796in <code>ctor_args_list</code>) and using a copy of the allocator
797<code>al</code> provided.<br>
798<b>Postconditions:</b> <code>*this==x</code>. The order on every index
799of the <code>multi_index_container</code> is preserved as well.<br>
800<b>Complexity:</b> <code>O(x.size()*log(x.size()) + C(x.size()))</code>.
801</blockquote>
802
803<code>multi_index_container(<br>
804&nbsp;&nbsp;multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp;&amp; x,<br>
805&nbsp;&nbsp;const allocator_type&amp; al);</code>
806
807<blockquote>
808<b>Requires:</b> <code>Value</code> is <code>MoveInsertable</code> into
809<code>multi_index_container</code>.<br>
810<b>Effects:</b> Constructs a <code>multi_index_container</code> by transferring/moving
811the elements of <code>x</code>, copying its internal objects (those specified
812in <code>ctor_args_list</code>) and using a copy of the allocator
813<code>al</code> provided. If <code>x.get_allocator()==al</code>, elements are transferred
814(no constructions involved), otherwise they are move constructed from <code>x</code>.<br>
815<b>Postconditions:</b> If <code>x==y</code> just
816before the movement, <code>*this==y</code>. The order on every index
817of the <code>multi_index_container</code> is preserved as well.<br>
818<b>Complexity:</b> Constant if <code>x.get_allocator()==al</code>, otherwise
819<code>O(x.size()*log(x.size()) + C(x.size()))</code>.
820</blockquote>
821
822<code>~multi_index_container()</code>
823
824<blockquote>
825<b>Effects:</b> Destroys the <code>multi_index_container</code> and all the elements
826contained. The order in which the elements are destroyed is not specified.<br>
827<b>Complexity:</b> <code>O(n)</code>.
828</blockquote>
829
830<code>multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; operator=(<br>
831&nbsp;&nbsp;const multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; x);</code>
832
833<blockquote>
834<b>Requires:</b> <code>Value</code> is <code>CopyInsertable</code> into
835<code>multi_index_container</code>.<br>
836<b>Effects:</b> Replaces the elements and internal objects (those specified
837in <code>ctor_args_list</code>) of the <code>multi_index_container</code>
838with copies from <code>x</code>. The internal allocator is replaced with a
839copy of <code>x.get_allocator()</code> if and only if
840<code>std::allocator_traits&lt;allocator_type>::propagate_on_container_copy_assignment::value</code>
841is <code>true</code>.<br>
842<b>Postconditions:</b> <code>*this==x</code>. The order on every index
843of the <code>multi_index_container</code> is preserved as well.<br>
844<b>Returns:</b> <code>*this</code>.<br>
845<b>Complexity:</b> <code>O(n + x.size()*log(x.size()) +
846C(x.size()))</code>.<br>
847<b>Exception safety:</b> Strong, provided the copy and assignment operations
848of the types of <code>ctor_args_list</code> do not throw.
849</blockquote>
850
851<code>multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; operator=(<br>
852&nbsp;&nbsp;multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp;&amp; x);</code>
853
854<blockquote>
855<b>Requires:</b> If <code>std::allocator_traits&lt;allocator_type>::propagate_on_container_move_assignment::value</code>
856is <code>true</code>, <code>Value</code> is <code>MoveInsertable</code> into
857<code>multi_index_container</code>.<br>
858<b>Effects:</b> Replaces the elements of <code>multi_index_container</code>
859with those of <code>x</code> or with copies move-constructed from those of <code>x</code>.
860Replaces the internal objects (those specified
861in <code>ctor_args_list</code>) with copies from the
862corresponding objects in <code>x</code>. Replaces the internal allocator with a
863copy of <code>x.get_allocator()</code> if and only if
864<code>std::allocator_traits&lt;allocator_type>::propagate_on_container_move_assignment::value</code>
865is <code>true</code>.
866Elements of <code>x</code> are transferred (no constructions involved) if and only if
867<code>x.get_allocator()</code> is copied or is equal to the previous value of the internal
868allocator.
869<br>
870<b>Postconditions:</b> If <code>x==y</code> just
871before the movement, <code>*this==y</code>. The order on every index
872of the <code>multi_index_container</code> is preserved as well.<br>
873<b>Returns:</b> <code>*this</code>.<br>
874<b>Complexity:</b> <code>O(n)</code> if elements of <code>x</code> are transferred,
875otherwise <code>O(n + x.size()*log(x.size()) + C(x.size()))</code>.<br>
876<b>Exception safety:</b> Strong, provided the copy and assignment operations
877of the types of <code>ctor_args_list</code> do not throw.
878</blockquote>
879
880<code>multi_index_container&lt;Value,IndexSpecifierList,Allocator>&amp; operator=(<br>
881&nbsp;&nbsp;std::initializer_list&lt;Value&gt; list);</code>
882
883<blockquote>
884<b>Requires:</b> <code>Value</code> is <code>CopyInsertable</code> into
885<code>multi_index_container</code>.<br>
886<b>Effects:</b> Replaces the elements the <code>multi_index_container</code>
887with copies of the elements of <code>list</code>, inserted in the specified order.
888Insertion of each element may or may not succeed depending
889on the acceptance by all the indices of the <code>multi_index_container</code>.<br>
890<b>Returns:</b> <code>*this</code>.<br>
891<b>Complexity:</b> <code>O(n + I(m))</code>, where <code>m</code> is the
892number of elements of <code>list</code>.<br>
893<b>Exception safety:</b> Strong, provided the copy and assignment operations
894of the types of <code>ctor_args_list</code> do not throw.
895</blockquote>
896
897<code>allocator_type get_allocator()const noexcept;</code>
898
899<blockquote>
900Returns a copy of the <code>allocator_type</code> object used to construct
901the <code>multi_index_container</code>.<br>
902<b>Complexity:</b> Constant.
903</blockquote>
904
905<h4><a name="index_retrieval">Index retrieval operations</a></h4>
906
907<code>template&lt;int N> typename nth_index&lt;N>::type&amp; get()noexcept;</code>
908
909<blockquote>
910<b>Requires:</b> <code>0 &lt;= N &lt; I-1</code>.<br>
911<b>Effects:</b> Returns a reference to the
912<code>nth_index&lt;N>::type</code> index held by <code>*this</code>.<br>
913<b>Complexity:</b> Constant.<br>
914</blockquote>
915
916<code>template&lt;int N> const typename nth_index&lt;N>::type&amp; get()const noexcept;</code>
917
918<blockquote>
919<b>Requires:</b> <code>0 &lt;= N &lt; I-1</code>.<br>
920<b>Effects:</b> Returns a <code>const</code> reference to the
921<code>nth_index&lt;N>::type</code> index held by <code>*this</code>.<br>
922<b>Complexity:</b> Constant.<br>
923</blockquote>
924
925<code>template&lt;typename Tag> typename index&lt;Tag>::type&amp; get()noexcept;</code>
926
927<blockquote>
928<b>Requires:</b> <code>Tag</code> is such that <code>index&lt;Tag>::type</code>
929is valid.<br>
930<b>Effects:</b> Returns a reference to the
931<code>index&lt;Tag>::type</code> index held by
932<code>*this</code>.<br>
933<b>Complexity:</b> Constant.<br>
934</blockquote>
935
936<code>template&lt;typename Tag> const typename index&lt;Tag>::type&amp; get()const noexcept;</code>
937
938<blockquote>
939<b>Requires:</b> <code>Tag</code> is such that <code>index&lt;Tag>::type</code>
940is valid.<br>
941<b>Effects:</b> Returns a <code>const</code> reference to the
942<code>index&lt;Tag>::type</code> index held by
943<code>*this</code>.<br>
944<b>Complexity:</b> Constant.<br>
945</blockquote>
946
947<h4><a name="projection">Projection operations</a></h4>
948
949<p>
950Given a <code>multi_index_container</code> with indices <code>i1</code>
951and <code>i2</code>, we say than an <code>i1</code>-iterator
952<code>it1</code> and an <code>i2</code>-iterator <code>it2</code>
953are <i>equivalent</i> if:
954<ul>
955  <li> <code>it1==i1.end()</code> AND <code>it2==i2.end()</code>,</li>
956  <li> OR <code>it1</code> and <code>it2</code> point to the
957    same element.</li>
958</ul>
959</p>
960
961<code>template&lt;int N,typename IteratorType><br>
962typename nth_index&lt;N>::type::iterator project(IteratorType it);</code>
963
964<blockquote>
965<b>Requires:</b> <code>0 &lt;= N &lt; I-1</code>. <code>IteratorType</code>
966belongs to <code>iterator_type_list</code>. <code>it</code> is a valid
967iterator of some index of <code>*this</code> (i.e. does not refer to some
968other <code>multi_index_container</code>.)<br>
969<b>Effects:</b> Returns an <code>nth_index&lt;N>::type::iterator</code>
970equivalent to <code>it</code>.<br>
971<b>Complexity:</b> Constant.<br>
972<b>Exception safety:</b> <code>nothrow</code>.
973</blockquote>
974
975<code>template&lt;int N,typename IteratorType><br>
976typename nth_index&lt;N>::type::const_iterator project(IteratorType it)const;</code>
977
978<blockquote>
979<b>Requires:</b> <code>0 &lt;= N &lt; I-1</code>. <code>IteratorType</code>
980belongs to <code>const_iterator_type_list</code> or
981<code>iterator_type_list</code>. <code>it</code> is a
982valid (constant or non-constant) iterator of some index of <code>*this</code>
983(i.e. does not refer to some other <code>multi_index_container</code>.)<br>
984<b>Effects:</b> Returns an <code>nth_index&lt;N>::type::const_iterator</code>
985equivalent to <code>it</code>.<br>
986<b>Complexity:</b> Constant.<br>
987<b>Exception safety:</b> <code>nothrow</code>.
988</blockquote>
989
990<code>template&lt;typename Tag,typename IteratorType><br>
991typename index&lt;Tag>::type::iterator project(IteratorType it);</code>
992
993<blockquote>
994<b>Requires:</b> <code>Tag</code> is such that
995<code>index&lt;Tag>::type</code> is valid. <code>IteratorType</code>
996belongs to <code>iterator_type_list</code>. <code>it</code> is a valid
997iterator of some index of <code>*this</code> (i.e. does not refer to some
998other <code>multi_index_container</code>.)<br>
999<b>Effects:</b> Returns an <code>index&lt;Tag>::type::iterator</code>
1000equivalent to <code>it</code>.<br>
1001<b>Complexity:</b> Constant.<br>
1002<b>Exception safety:</b> <code>nothrow</code>.
1003</blockquote>
1004
1005<code>template&lt;typename Tag,typename IteratorType><br>
1006typename index&lt;Tag>::type::const_iterator project(IteratorType it)const;</code>
1007
1008<blockquote>
1009<b>Requires:</b> <code>Tag</code> is such that
1010<code>index&lt;Tag>::type</code> is valid. <code>IteratorType</code>
1011belongs to <code>const_iterator_type_list</code> or
1012<code>iterator_type_list</code>. <code>it</code> is a valid
1013(constant or non-constant) iterator of some index of <code>*this</code>
1014(i.e. does not refer to some other <code>multi_index_container</code>.)<br>
1015<b>Effects:</b> Returns an <code>index&lt;Tag>::type::const_iterator</code>
1016iterator equivalent to <code>it</code>.<br>
1017<b>Complexity:</b> Constant.<br>
1018<b>Exception safety:</b> <code>nothrow</code>.
1019</blockquote>
1020
1021<h4><a name="serialization">Serialization</a></h4>
1022
1023<p>
1024<code>multi_index_container</code>s can be archived/retrieved by means of
1025<a href="../../../serialization/index.html">Boost.Serialization</a>.
1026Boost.MultiIndex does not expose a public serialization interface, as this
1027is provided by Boost.Serialization itself. Both regular and XML
1028archives are supported.
1029</p>
1030
1031<p>
1032Each of the indices comprising a given <code>multi_index_container</code> contributes
1033its own preconditions as well as guarantees on the retrieved containers. In describing
1034these, the following concepts are used. A type <code>T</code> is <i>serializable</i>
1035(resp. XML-serializable) if any object of type <code>T</code> can be saved to an output
1036archive (XML archive) and later retrieved from an input archive (XML archive) associated to
1037the same storage. If <code>x'</code> of type <code>T</code> is loaded from the
1038serialization information saved from another object <code>x</code>, we say that
1039<code>x'</code> is a <i>restored copy</i> of <code>x</code>. Given a binary predicate
1040<code>Pred</code> over (<code>T</code>, <code>T</code>), and objects <code>p</code>
1041and <code>q</code> of type <code>Pred</code>, we say that <code>q</code>
1042is <i>serialization-compatible</i> with <code>p</code> if
1043<blockquote>
1044<code>p(x,y) == q(x',y')</code>
1045</blockquote>
1046for every <code>x</code> and <code>y</code> of type <code>T</code> and <code>x'</code> and
1047<code>y'</code> being restored copies of <code>x</code> and <code>y</code>,
1048respectively.
1049</p>
1050
1051Operation: saving of a <code>multi_index_container</code> <code>m</code> to an
1052output archive (XML archive) <code>ar</code>.
1053
1054<blockquote>
1055<b>Requires:</b> <code>Value</code> is serializable (XML-serializable). Additionally,
1056each of the indices of <code>m</code> can impose another requirements.<br>
1057<b>Exception safety:</b> Strong with respect to <code>m</code>. If an exception
1058is thrown, <code>ar</code> may be left in an inconsistent state.
1059</blockquote>
1060
1061Operation: loading of a <code>multi_index_container</code> <code>m'</code> from an
1062input archive (XML archive) <code>ar</code>.
1063
1064<blockquote>
1065<b>Requires:</b> <code>Value</code> is serializable (XML-serializable). Additionally,
1066each of the indices of <code>m'</code> can impose another requirements.<br>
1067<b>Exception safety:</b> Basic. If an exception is thrown, <code>ar</code> may be
1068left in an inconsistent state.
1069</blockquote>
1070
1071<hr>
1072
1073<div class="prev_link"><a href="index.html"><img src="../prev.gif" alt="Boost.MultiIndex reference" border="0"><br>
1074Boost.MultiIndex reference
1075</a></div>
1076<div class="up_link"><a href="index.html"><img src="../up.gif" alt="Boost.MultiIndex reference" border="0"><br>
1077Boost.MultiIndex reference
1078</a></div>
1079<div class="next_link"><a href="indices.html"><img src="../next.gif" alt="index reference" border="0"><br>
1080Index reference
1081</a></div><br clear="all" style="clear: all;">
1082
1083<br>
1084
1085<p>Revised May 9th 2020</p>
1086
1087<p>&copy; Copyright 2003-2020 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
1088Distributed under the Boost Software
1089License, Version 1.0. (See accompanying file <a href="../../../../LICENSE_1_0.txt">
1090LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
1091http://www.boost.org/LICENSE_1_0.txt</a>)
1092</p>
1093
1094</body>
1095</html>
1096