1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0.1 Transitional//EN">
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">
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>
19 <div class=
"prev_link"><a href=
"index.html"><img src=
"../prev.gif" alt=
"Boost.MultiIndex reference" border=
"0"><br>
20 Boost.MultiIndex reference
22 <div class=
"up_link"><a href=
"index.html"><img src=
"../up.gif" alt=
"Boost.MultiIndex reference" border=
"0"><br>
23 Boost.MultiIndex reference
25 <div class=
"next_link"><a href=
"indices.html"><img src=
"../next.gif" alt=
"index reference" border=
"0"><br>
27 </a></div><br clear=
"all" style=
"clear: all;">
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>
39 <li><a href=
"#multi_index_container">Class template
<code>multi_index_container
</code></a>
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>
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>
62 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
64 <span class=keyword
>namespace
</span> <span class=identifier
>multi_index
</span><span class=special
>{
</span>
66 <span class=keyword
>template
</span><span class=special
><</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
><</span><span class=identifier
>ordered_unique
</span><span class=special
><</span><span class=identifier
>identity
</span><span class=special
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=special
>></span> <span class=special
>>,
</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
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=special
>></span>
70 <span class=keyword
>class
</span> <span class=identifier
>multi_index_container
</span><span class=special
>;
</span>
72 <span class=special
>}
</span> <span class=comment
>// namespace boost::multi_index
</span>
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>
76 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
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.
85 <a name=
"synopsis">Header
86 <a href=
"../../../../boost/multi_index_container.hpp"><code>"boost/multi_index_container.hpp"</code></a>
91 <span class=preprocessor
>#include
</span> <span class=special
><</span><span class=identifier
>initializer_list
</span><span class=special
>></span>
93 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
95 <span class=keyword
>namespace
</span> <span class=identifier
>multi_index
</span><span class=special
>{
</span>
97 <span class=keyword
>template
</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><span class=special
>></span>
98 <span class=keyword
>class
</span> <span class=identifier
>multi_index_container
</span><span class=special
>;
</span>
100 <span class=comment
>// multi_index_container associated global class templates:
</span>
102 <span class=keyword
>template
</span><span class=special
><</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
>></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
><</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
>></span> <span class=keyword
>struct
</span> <span class=identifier
>index
</span><span class=special
>;
</span>
105 <span class=keyword
>template
</span><span class=special
><</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
>></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
><</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
>></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
><</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
>></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
><</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
>></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>
114 <span class=comment
>// multi_index_container global functions for index retrieval:
</span>
116 <span class=keyword
>template
</span><span class=special
><</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
>></span>
119 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
120 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
121 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
122 <span class=identifier
>get
</span><span class=special
>(
</span><span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
124 <span class=keyword
>template
</span><span class=special
><</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
>></span>
127 <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
128 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
129 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</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
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
132 <span class=keyword
>template
</span><span class=special
><</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
>></span>
135 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
136 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
137 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
138 <span class=identifier
>get
</span><span class=special
>(
</span><span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
140 <span class=keyword
>template
</span><span class=special
><</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
>></span>
143 <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
144 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
145 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</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
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
148 <span class=comment
>// multi_index_container global functions for projection of iterators:
</span>
150 <span class=keyword
>template
</span><span class=special
><</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
>></span>
154 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
155 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
156 <span class=special
>>::
</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
><</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
>>&</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>
161 <span class=keyword
>template
</span><span class=special
><</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
>></span>
165 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
166 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
167 <span class=special
>>::
</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
><</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
>>&</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>
172 <span class=keyword
>template
</span><span class=special
><</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
>></span>
176 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
177 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
178 <span class=special
>>::
</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
><</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
>>&</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>
183 <span class=keyword
>template
</span><span class=special
><</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
>></span>
187 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
188 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
189 <span class=special
>>::
</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
><</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
>>&</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>
194 <span class=comment
>// comparison:
</span>
196 <span class=comment
>//
<b>OP
</b> is any of ==,
<,!=,
>,
>=,
<=
</span>
198 <span class=keyword
>template
</span><span class=special
><</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
>></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
><</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
>>&</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
><</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
>>&</span> <span class=identifier
>y
</span><span class=special
>);
</span>
206 <span class=comment
>// specialized algorithms:
</span>
208 <span class=keyword
>template
</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><span class=special
>></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
><</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
>>&</span> <span class=identifier
>x
</span><span class=special
>,
</span>
211 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>y
</span><span class=special
>);
</span>
213 <span class=special
>}
</span> <span class=comment
>// namespace boost::multi_index
</span>
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>
219 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
222 <h3><a name=
"multi_index_container">
223 Class template
<code>multi_index_container
</code>
227 This is the main component of Boost.MultiIndex. A
<code>multi_index_container
</code>
228 is a container class template holding a compile-time user-defined list of
229 <a href=
"indices.html">indices
</a>. These indices provide different interfaces
230 for 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
232 and for access to the indices held.
236 A
<code>multi_index_container
</code> type is instantiated with the type of the
237 elements 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
244 For convenience of use, all public methods and types of the first index
245 specified are inherited by
<code>multi_index_container
</code>. This also includes global
246 operators and functions associated with the index (vg. comparison and
251 <span class=keyword
>template
</span><span class=special
><</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
><</span><span class=identifier
>ordered_unique
</span><span class=special
><</span><span class=identifier
>identity
</span><span class=special
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=special
>></span> <span class=special
>>,
</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
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=special
>></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>
259 <span class=comment
>// types:
</span>
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>
268 <span class=comment
>// nested class templates:
</span>
270 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>int
</span> <span class=identifier
>N
</span><span class=special
>></span>
271 <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>
272 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Tag
</span><span class=special
>></span>
273 <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 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>int
</span> <span class=identifier
>N
</span><span class=special
>></span>
276 <span class=keyword
>struct
</span> <span class=identifier
>nth_index_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
277 <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>
278 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>int
</span> <span class=identifier
>N
</span><span class=special
>></span>
279 <span class=keyword
>struct
</span> <span class=identifier
>nth_index_const_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
280 <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>
281 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Tag
</span><span class=special
>></span>
282 <span class=keyword
>struct
</span> <span class=identifier
>index_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
283 <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>
284 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Tag
</span><span class=special
>></span>
285 <span class=keyword
>struct
</span> <span class=identifier
>index_const_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
286 <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 <span class=comment
>// construct/copy/destroy:
</span>
290 <span class=keyword
>explicit
</span> <span class=identifier
>multi_index_container
</span><span class=special
>(
291 </span><span class=keyword
>const
</span> <span class=identifier
>ctor_args_list
</span><span class=special
>&</span> <span class=identifier
>args_list
</span><span class=special
>=
</span><span class=identifier
>ctor_args_list
</span><span class=special
>(),
292 </span><span class=keyword
>const
</span> <span class=identifier
>allocator_type
</span><span class=special
>&</span> <span class=identifier
>al
</span><span class=special
>=
</span><span class=identifier
>allocator_type
</span><span class=special
>());
</span>
293 <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
>&</span> <span class=identifier
>al
</span><span class=special
>);
</span>
294 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>InputIterator
</span><span class=special
>></span>
295 <span class=identifier
>multi_index_container
</span><span class=special
>(
</span>
296 <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>
297 <span class=keyword
>const
</span> <span class=identifier
>ctor_args_list
</span><span class=special
>&</span> <span class=identifier
>args_list
</span><span class=special
>=
</span><span class=identifier
>ctor_args_list
</span><span class=special
>(),
298 </span><span class=keyword
>const
</span> <span class=identifier
>allocator_type
</span><span class=special
>&</span> <span class=identifier
>al
</span><span class=special
>=
</span><span class=identifier
>allocator_type
</span><span class=special
>());
</span>
299 <span class=identifier
>multi_index_container
</span><span class=special
>(
</span>
300 <span class=identifier
>std
</span><span class=special
>::
</span><span class=identifier
>initializer_list
</span><span class=special
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=identifier
>list
</span><span class=special
>,
</span>
301 <span class=keyword
>const
</span> <span class=identifier
>ctor_args_list
</span><span class=special
>&</span> <span class=identifier
>args_list
</span><span class=special
>=
</span><span class=identifier
>ctor_args_list
</span><span class=special
>(),
</span>
302 <span class=keyword
>const
</span> <span class=identifier
>allocator_type
</span><span class=special
>&</span> <span class=identifier
>al
</span><span class=special
>=
</span><span class=identifier
>allocator_type
</span><span class=special
>());
</span>
303 <span class=identifier
>multi_index_container
</span><span class=special
>(
</span>
304 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
305 <span class=identifier
>multi_index_container
</span><span class=special
>(
</span>
306 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
308 <span class=special
>~
</span><span class=identifier
>multi_index_container
</span><span class=special
>();
</span>
310 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=keyword
>operator
</span><span class=special
>=(
</span>
311 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
312 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=keyword
>operator
</span><span class=special
>=(
</span>
313 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
314 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=keyword
>operator
</span><span class=special
>=(
</span>
315 <span class=identifier
>std
</span><span class=special
>::
</span><span class=identifier
>initializer_list
</span><span class=special
><</span><span class=identifier
>Value
</span><span class=special
>></span> <span class=identifier
>list
</span><span class=special
>)
</span>
317 <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>
319 <span class=comment
>// retrieval of indices
</span>
321 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>int
</span> <span class=identifier
>N
</span><span class=special
>></span> <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span> <span class=identifier
>get
</span><span class=special
>()
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
322 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>int
</span> <span class=identifier
>N
</span><span class=special
>></span> <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span> <span class=identifier
>get
</span><span class=special
>()
</span><span class=keyword
>const
</span> <span class=keyword
>noexcept
</span><span class=special
>;
</span>
323 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Tag
</span><span class=special
>></span> <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span> <span class=identifier
>get
</span><span class=special
>()
</span><span class=keyword
>noexcept
</span><span class=special
>;
</span>
324 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Tag
</span><span class=special
>></span> <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span> <span class=identifier
>get
</span><span class=special
>()
</span><span class=keyword
>const
</span> <span class=keyword
>noexcept
</span><span class=special
>;
</span>
326 <span class=comment
>// projection of iterators
</span>
328 <span class=keyword
>template
</span><span class=special
><</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
>></span>
329 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>::
</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>
330 <span class=keyword
>template
</span><span class=special
><</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
>></span>
331 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>::
</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>
332 <span class=keyword
>template
</span><span class=special
><</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
>></span>
333 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</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>
334 <span class=keyword
>template
</span><span class=special
><</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
>></span>
335 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</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>
336 <span class=special
>};
</span>
338 <span class=comment
>// multi_index_container associated global class templates:
</span>
340 <span class=keyword
>template
</span><span class=special
><</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
>></span> <span class=keyword
>struct
</span> <span class=identifier
>nth_index
</span>
341 <span class=special
>{
</span>
342 <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
><</span><span class=identifier
>N
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
343 <span class=special
>};
</span>
345 <span class=keyword
>template
</span><span class=special
><</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
>></span> <span class=keyword
>struct
</span> <span class=identifier
>index
</span>
346 <span class=special
>{
</span>
347 <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
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
348 <span class=special
>};
</span>
350 <span class=keyword
>template
</span><span class=special
><</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
>></span>
351 <span class=keyword
>struct
</span> <span class=identifier
>nth_index_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
352 <span class=special
>{
</span>
353 <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
><</span><span class=identifier
>N
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
354 <span class=special
>};
</span>
356 <span class=keyword
>template
</span><span class=special
><</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
>></span>
357 <span class=keyword
>struct
</span> <span class=identifier
>nth_index_const_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
358 <span class=special
>{
</span>
359 <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
><</span><span class=identifier
>N
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
360 <span class=special
>};
</span>
362 <span class=keyword
>template
</span><span class=special
><</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
>></span>
363 <span class=keyword
>struct
</span> <span class=identifier
>index_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
364 <span class=special
>{
</span>
365 <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
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
366 <span class=special
>};
</span>
368 <span class=keyword
>template
</span><span class=special
><</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
>></span>
369 <span class=keyword
>struct
</span> <span class=identifier
>index_const_iterator
</span> <span class=comment
><b>// deprecated
</b></span>
370 <span class=special
>{
</span>
371 <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
><</span><span class=identifier
>Tag
</span><span class=special
>>::
</span><span class=identifier
>type
</span> <span class=identifier
>type
</span><span class=special
>;
</span>
372 <span class=special
>};
</span>
374 <span class=comment
>// multi_index_container global functions for index retrieval:
</span>
376 <span class=keyword
>template
</span><span class=special
><</span>
377 <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>
378 <span class=special
>></span>
379 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
380 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
381 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
382 <span class=identifier
>get
</span><span class=special
>(
</span><span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span>
383 <span class=special
>{
</span>
384 <span class=keyword
>return
</span> <span class=identifier
>m
</span><span class=special
>.
</span><span class=identifier
>get
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>();
</span>
385 <span class=special
>}
</span>
387 <span class=keyword
>template
</span><span class=special
><</span>
388 <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>
389 <span class=special
>></span>
390 <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
391 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
392 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
393 <span class=identifier
>get
</span><span class=special
>(
</span><span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span>
394 <span class=special
>{
</span>
395 <span class=keyword
>return
</span> <span class=identifier
>m
</span><span class=special
>.
</span><span class=identifier
>get
</span><span class=special
><</span><span class=identifier
>N
</span><span class=special
>>();
</span>
396 <span class=special
>}
</span>
398 <span class=keyword
>template
</span><span class=special
><</span>
399 <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>
400 <span class=special
>></span>
401 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
402 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
403 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
404 <span class=identifier
>get
</span><span class=special
>(
</span><span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span>
405 <span class=special
>{
</span>
406 <span class=keyword
>return
</span> <span class=identifier
>m
</span><span class=special
>.
</span><span class=identifier
>get
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>();
</span>
407 <span class=special
>}
</span>
409 <span class=keyword
>template
</span><span class=special
><</span>
410 <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>
411 <span class=special
>></span>
412 <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
413 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
414 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>&</span>
415 <span class=identifier
>get
</span><span class=special
>(
</span><span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>)
</span><span class=keyword
>noexcept
</span>
416 <span class=special
>{
</span>
417 <span class=keyword
>return
</span> <span class=identifier
>m
</span><span class=special
>.
</span><span class=identifier
>get
</span><span class=special
><</span><span class=identifier
>Tag
</span><span class=special
>>();
</span>
418 <span class=special
>}
</span>
420 <span class=comment
>// multi_index_container global functions for projection of iterators:
</span>
422 <span class=keyword
>template
</span><span class=special
><</span>
423 <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>
424 <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>
425 <span class=special
>></span>
426 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
427 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
428 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>::
</span><span class=identifier
>iterator
</span>
429 <span class=identifier
>project
</span><span class=special
>(
</span>
430 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>,
</span>
431 <span class=identifier
>IteratorType
</span> <span class=identifier
>it
</span><span class=special
>)
</span>
432 <span class=special
>{
</span>
433 <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
><</span><span class=identifier
>N
</span><span class=special
>>(
</span><span class=identifier
>it
</span><span class=special
>);
</span>
434 <span class=special
>}
</span>
436 <span class=keyword
>template
</span><span class=special
><</span>
437 <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>
438 <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>
439 <span class=special
>></span>
440 <span class=keyword
>typename
</span> <span class=identifier
>nth_index
</span><span class=special
><</span>
441 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>N
</span>
442 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>::
</span><span class=identifier
>const_iterator
</span>
443 <span class=identifier
>project
</span><span class=special
>(
</span>
444 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>,
</span>
445 <span class=identifier
>IteratorType
</span> <span class=identifier
>it
</span><span class=special
>)
</span>
446 <span class=special
>{
</span>
447 <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
><</span><span class=identifier
>N
</span><span class=special
>>(
</span><span class=identifier
>it
</span><span class=special
>);
</span>
448 <span class=special
>}
</span>
450 <span class=keyword
>template
</span><span class=special
><</span>
451 <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>
452 <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>
453 <span class=special
>></span>
454 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
455 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
456 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>::
</span><span class=identifier
>iterator
</span>
457 <span class=identifier
>project
</span><span class=special
>(
</span>
458 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>,
</span>
459 <span class=identifier
>IteratorType
</span> <span class=identifier
>it
</span><span class=special
>)
</span>
460 <span class=special
>{
</span>
461 <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
><</span><span class=identifier
>Tag
</span><span class=special
>>(
</span><span class=identifier
>it
</span><span class=special
>);
</span>
462 <span class=special
>}
</span>
464 <span class=keyword
>template
</span><span class=special
><</span>
465 <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>
466 <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>
467 <span class=special
>></span>
468 <span class=keyword
>typename
</span> <span class=identifier
>index
</span><span class=special
><</span>
469 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>,
</span><span class=identifier
>Tag
</span>
470 <span class=special
>>::
</span><span class=identifier
>type
</span><span class=special
>::
</span><span class=identifier
>const_iterator
</span>
471 <span class=identifier
>project
</span><span class=special
>(
</span>
472 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>m
</span><span class=special
>,
</span>
473 <span class=identifier
>IteratorType
</span> <span class=identifier
>it
</span><span class=special
>)
</span>
474 <span class=special
>{
</span>
475 <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
><</span><span class=identifier
>Tag
</span><span class=special
>>(
</span><span class=identifier
>it
</span><span class=special
>);
</span>
476 <span class=special
>}
</span>
478 <span class=comment
>// comparison:
</span>
480 <span class=comment
>//
<b>OP
</b> is any of ==,
<,!=,
>,
>=,
<=
</span>
482 <span class=keyword
>template
</span><span class=special
><</span>
483 <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>
484 <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>
485 <span class=special
>></span>
486 <span class=keyword
>bool
</span> <span class=keyword
>operator
</span> <b><i>OP
</i></b><span class=special
>(
</span>
487 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>x
</span><span class=special
>,
</span>
488 <span class=keyword
>const
</span> <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>y
</span><span class=special
>)
</span>
489 <span class=special
>{
</span>
490 <span class=keyword
>return
</span> <span class=identifier
>get
</span><span class=special
><</span><span class=number
>0</span><span class=special
>>(
</span><span class=identifier
>x
</span><span class=special
>)
</span> <b><i>OP
</i></b> <span class=identifier
>get
</span><span class=special
><</span><span class=number
>0</span><span class=special
>>(
</span><span class=identifier
>y
</span><span class=special
>);
</span>
491 <span class=special
>}
</span>
493 <span class=comment
>// specialized algorithms:
</span>
495 <span class=keyword
>template
</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><span class=special
>></span>
496 <span class=keyword
>void
</span> <span class=identifier
>swap
</span><span class=special
>(
</span>
497 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>x
</span><span class=special
>,
</span>
498 <span class=identifier
>multi_index_container
</span><span class=special
><</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
>>&</span> <span class=identifier
>y
</span><span class=special
>)
</span>
499 <span class=special
>{
</span>
500 <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>
501 <span class=special
>}
</span>
503 <span class=special
>}
</span> <span class=comment
>// namespace boost::multi_index
</span>
505 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
508 <h4><a name=
"complexity">Complexity
</a></h4>
511 In the descriptions of operations of
<code>multi_index_container
</code>, we adopt the
512 scheme outlined in the
513 <a href=
"indices.html#complexity_signature">complexity signature section
</a>.
516 <h4><a name=
"instantiation_types">Instantiation types
</a></h4>
519 <code>multi_index_container
</code> is instantiated with the following types:
521 <li><code>Value
</code> is the type of the elements contained.
<code>Value
</code> must be
522 <code>Erasable
</code> from
<code>multi_index_container
</code>.
524 <li><code>IndexSpecifierList
</code> specifies the indices that the
525 <code>multi_index_container
</code> is composed of. It must be a non-empty
526 <a href=
"../../../../libs/mpl/doc/refmanual/forward-sequence.html">
527 <code>MPL Forward Sequence
</code></a> (and, preferrably,
528 an
<a href=
"../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
529 <code>MPL Random Access Sequence
</code></a>) of index specifiers. For
530 syntactic convenience, the
531 <a href=
"indices.html#indexed_by"><code>indexed_by
</code></a>
532 MPL sequence can be used.
534 <li><code>Allocator
</code> must be an allocator of
<code>Value
</code> objects
535 satisfying the associated C++ requirements at
<b>[allocator.requirements]
</b>.
536 The following relaxations to the standard requirements are allowed:
538 <li>Non-equal allocator instances are supported: swapping two non-equal
539 instances must not throw any exception.
541 <li>For every type
<code>T
</code>,
542 the type
<code>Allocator::rebind
<T
>::other::pointer
</code> can be any
543 kind of random access iterator, provided that it is explicitly constructible from
544 the literal
<code>0</code> (standing here as the null pointer) or from any
545 <code>p
</code> of type
<code>T*
</code> pointing into an area allocated by
546 some instance of
<code>Allocator
</code> or some other allocator type rebound
547 from
<code>Allocator
</code>. A
<code>pointer
</code> constructed from
548 <code>p
</code> shall dereference to
<code>*p
</code>.
553 Indices of a given
<code>multi_index_container
</code> instantiation cannot have
554 duplicate
<a href=
"indices.html#tags">tags
</a>, either within a single
555 index or in two different indices.
558 <h4><a name=
"types">Nested types
</a></h4>
560 <code>ctor_args_list
</code>
563 Although the exact definition of
<code>ctor_args_list
</code> is
564 implementation defined, from the user point of view this type can be
565 treated as equivalent to
566 <code>::boost::tuple
<C
<sub>0</sub>,...,C
<sub>I-
1</sub>></code>,
567 where
<code>C
<sub>i
</sub></code> is the
<code>ctor_args
</code> type of the
568 <code>i
</code>-th index held by the
<code>multi_index_container
</code>, in the
569 same order as they were specified. Strictly speaking, there is an
570 implicit conversion from
571 <code>const ::boost::tuple
<C
<sub>0</sub>,...,C
<sub>I-
1</sub>>&</code>
572 to
<code>const ctor_args_list
&</code>. This type is used for
573 providing the construction arguments of the indices of the
574 <code>multi_index_container
</code>.
<code>ctor_args_list
</code> is
575 <code>DefaultConstructible
</code>, provided that all
<code>ctor_args
</code> types
576 involved are
<code>DefaultConstructible
</code>.
579 <code>index_specifier_type_list
</code>
582 Same type as
<code>IndexSpecifierList
</code>.
585 <code>index_type_list
</code>
589 <a href=
"../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
590 <code>MPL Random Access Sequence
</code></a> and
591 <a href=
"../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
592 <code>MPL Extensible Sequence
</code></a> containing the types of the indices held by
593 the
<code>multi_index_container
</code>, in the same order as they were specified.
596 <code>iterator_type_list
</code>
600 <a href=
"../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
601 <code>MPL Random Access Sequence
</code></a> and
602 <a href=
"../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
603 <code>MPL Extensible Sequence
</code></a> containing the types of the iterators of
604 the indices held by the
<code>multi_index_container
</code>, in the same order as they were
608 <code>const_iterator_type_list
</code>
612 <a href=
"../../../../libs/mpl/doc/refmanual/random-access-sequence.html">
613 <code>MPL Random Access Sequence
</code></a> and
614 <a href=
"../../../../libs/mpl/doc/refmanual/extensible-sequence.html">
615 <code>MPL Extensible Sequence
</code></a> containing the types of the constant
616 iterators of the indices held by the
<code>multi_index_container
</code>, in the same order
617 as they were specified.
620 <h4><a name=
"nested_templates">Nested class templates
</a></h4>
622 <code>template
<int N
> struct nth_index
</code>
625 <code>nth_index
<N
>::type
</code> yields the type of the
626 <code>N
</code>-th (
0-based) index held by the
<code>multi_index_container
</code>, in
627 the same order as they were specified.
<br>
628 <b>Requires:
</b> <code>0 <= N
< I
</code>.
631 <code>template
<typename Tag
> struct index
</code>
634 <code>index
<Tag
>::type
</code> yields the type of the index which
635 has
<code>Tag
</code> as an associated
<a href=
"indices.html#tags">tag type
</a>.
<br>
636 <b>Requires:
</b> Some index of the
<code>multi_index_container
</code> has
<code>Tag
</code>
637 as an associated tag type.
640 <code>template
<int N
> struct nth_index_iterator
</code>
643 <code>nth_index_iterator
<N
>::type
</code> is equivalent to
644 <code>nth_index
<N
>::type::iterator
</code>.
<br>
645 <b>Note:
</b> The use of
<code>nth_index_iterator
</code> is deprecated.
648 <code>template
<int N
> struct nth_index_const_iterator
</code>
651 <code>nth_index_const_iterator
<N
>::type
</code> is equivalent to
652 <code>nth_index
<N
>::type::const_iterator
</code>.
<br>
653 <b>Note:
</b> The use of
<code>nth_index_const_iterator
</code> is deprecated.
656 <code>template
<typename Tag
> struct index_iterator
</code>
659 <code>index_iterator
<Tag
>::type
</code> is equivalent to
660 <code>index
<Tag
>::type::iterator
</code>.
<br>
661 <b>Note:
</b> The use of
<code>index_iterator
</code> is deprecated.
664 <code>template
<typename Tag
> struct index_const_iterator
</code>
667 <code>index_const_iterator
<Tag
>::type
</code> is equivalent to
668 <code>index
<Tag
>::type::const_iterator
</code>.
<br>
669 <b>Note:
</b> The use of
<code>index_const_iterator
</code> is deprecated.
672 <h4><a name=
"constructors">Constructors, copy and assignment
</a></h4>
674 <code>explicit multi_index_container(
<br>
675 const ctor_args_list
& args_list=ctor_args_list(),
<br>
676 const allocator_type
& al=allocator_type());
</code>
679 <b>Effects:
</b> Constructs an empty
<code>multi_index_container
</code> using the
680 specified argument list and allocator.
<br>
681 <b>Complexity:
</b> Constant.
684 <code>explicit multi_index_container(const allocator_type
& al);
</code>
687 <b>Effects:
</b> Constructs an empty
<code>multi_index_container
</code> using the
688 specified allocator and the default value of
<code>ctor_args_list
</code>.
<br>
689 <b>Complexity:
</b> Constant.
692 <code>template
<typename InputIterator
><br>
693 multi_index_container(
<br>
694 InputIterator first,InputIterator last,
<br>
695 const ctor_args_list
& args_list=ctor_args_list(),
<br>
696 const allocator_type
& al=allocator_type());
</code>
699 <b>Requires:
</b> <code>InputIterator
</code> is an input iterator.
700 <code>Value
</code> is
701 <code>EmplaceConstructible
</code> into
<code>multi_index_container
</code>
702 from
<code>*first
</code>.
703 <code>last
</code> is reachable from
<code>first
</code>.
<br>
704 <b>Effects:
</b> Constructs and empty
<code>multi_index_container
</code> using the
705 specified argument list and allocator and fills it with
706 the elements in the range [
<code>first
</code>,
<code>last
</code>).
707 Insertion of each element may or may not succeed depending
708 on the acceptance by all the indices of the
<code>multi_index_container
</code>.
<br>
709 <b>Complexity:
</b> <code>O(m*H(m))
</code>, where
<code>m
</code> is
710 the number of elements in [
<code>first
</code>,
<code>last
</code>).
<br>
713 <code>multi_index_container(
<br>
714 std::initializer_list
<Value
> list,
<br>
715 const ctor_args_list
& args_list=ctor_args_list(),
<br>
716 const allocator_type
& al=allocator_type());
</code>
719 <b>Effects:
</b> Equivalent to
720 <code>multi_index_container(list.begin(),list.end(),args_list,al)
</code>.
723 <code>multi_index_container(
<br>
724 const multi_index_container
<Value,IndexSpecifierList,Allocator
>& x);
</code>
727 <b>Requires:
</b> <code>Value
</code> is
<code>CopyInsertable
</code> into
728 <code>multi_index_container
</code>.
<br>
729 <b>Effects:
</b> Constructs a copy of
<code>x
</code>, copying its
730 elements as well as its internal objects (those specified
731 in
<code>ctor_args_list
</code> and the allocator.)
<br>
732 <b>Postconditions:
</b> <code>*this==x
</code>. The order on every index
733 of the
<code>multi_index_container
</code> is preserved as well.
<br>
734 <b>Complexity:
</b> <code>O(x.size()*log(x.size()) + C(x.size()))
</code>.
737 <code>multi_index_container(
<br>
738 multi_index_container
<Value,IndexSpecifierList,Allocator
>&& x);
</code>
741 <b>Effects:
</b> Constructs a
<code>multi_index_container
</code> by moving the
742 elements of
<code>x
</code> and copying its internal objects (those specified
743 in
<code>ctor_args_list
</code> and the allocator.)
<br>
744 <b>Postconditions:
</b> If
<code>x==y
</code> just
745 before the movement,
<code>*this==y
</code>. The order on every index
746 of the
<code>multi_index_container
</code> is preserved as well.
<br>
747 <b>Complexity:
</b> Constant.
750 <code>~multi_index_container()
</code>
752 <b>Effects:
</b> Destroys the
<code>multi_index_container
</code> and all the elements
753 contained. The order in which the elements are destroyed is not specified.
<br>
754 <b>Complexity:
</b> <code>O(n)
</code>.
757 <code>multi_index_container
<Value,IndexSpecifierList,Allocator
>& operator=(
<br>
758 const multi_index_container
<Value,IndexSpecifierList,Allocator
>& x);
</code>
761 <b>Requires:
</b> <code>Value
</code> is
<code>CopyInsertable
</code> into
762 <code>multi_index_container
</code>.
<br>
763 <b>Effects:
</b> Replaces the elements and internal objects of the
<code>multi_index_container
</code>
764 with copies from
<code>x
</code>.
<br>
765 <b>Postconditions:
</b> <code>*this==x
</code>. The order on every index
766 of the
<code>multi_index_container
</code> is preserved as well.
<br>
767 <b>Returns:
</b> <code>*this
</code>.
<br>
768 <b>Complexity:
</b> <code>O(n + x.size()*log(x.size()) +
769 C(x.size()))
</code>.
<br>
770 <b>Exception safety:
</b> Strong, provided the copy and assignment operations
771 of the types of
<code>ctor_args_list
</code> do not throw.
774 <code>multi_index_container
<Value,IndexSpecifierList,Allocator
>& operator=(
<br>
775 multi_index_container
<Value,IndexSpecifierList,Allocator
>&& x);
</code>
778 <b>Effects:
</b> Replaces the elements of
<code>multi_index_container
</code>
779 with those of
<code>x
</code> and its internal objects with copies from the
780 corresponding objects in
<code>x
</code>.
<br>
781 <b>Postconditions:
</b> If
<code>x==y
</code> just
782 before the movement,
<code>*this==y
</code>. The order on every index
783 of the
<code>multi_index_container
</code> is preserved as well.
<br>
784 <b>Returns:
</b> <code>*this
</code>.
<br>
785 <b>Complexity:
</b> <code>O(n)
</code>.
<br>
786 <b>Exception safety:
</b> Strong, provided the copy and assignment operations
787 of the types of
<code>ctor_args_list
</code> do not throw.
790 <code>multi_index_container
<Value,IndexSpecifierList,Allocator
>& operator=(
<br>
791 std::initializer_list
<Value
> list);
</code>
794 <b>Requires:
</b> <code>Value
</code> is
<code>CopyInsertable
</code> into
795 <code>multi_index_container
</code>.
<br>
796 <b>Effects:
</b> Replaces the elements the
<code>multi_index_container
</code>
797 with copies of the elements of
<code>list
</code>, inserted in the specified order.
798 Insertion of each element may or may not succeed depending
799 on the acceptance by all the indices of the
<code>multi_index_container
</code>.
<br>
800 <b>Returns:
</b> <code>*this
</code>.
<br>
801 <b>Complexity:
</b> <code>O(n + I(m))
</code>, where
<code>m
</code> is the
802 number of elements of
<code>list
</code>.
<br>
803 <b>Exception safety:
</b> Strong, provided the copy and assignment operations
804 of the types of
<code>ctor_args_list
</code> do not throw.
807 <code>allocator_type get_allocator()const noexcept;
</code>
810 Returns a copy of the
<code>allocator_type
</code> object used to construct
811 the
<code>multi_index_container
</code>.
<br>
812 <b>Complexity:
</b> Constant.
815 <h4><a name=
"index_retrieval">Index retrieval operations
</a></h4>
817 <code>template
<int N
> typename nth_index
<N
>::type
& get()noexcept;
</code>
820 <b>Requires:
</b> <code>0 <= N
< I
</code>.
<br>
821 <b>Effects:
</b> Returns a reference to the
822 <code>nth_index
<N
>::type
</code> index held by
<code>*this
</code>.
<br>
823 <b>Complexity:
</b> Constant.
<br>
826 <code>template
<int N
> const typename nth_index
<N
>::type
& get()const noexcept;
</code>
829 <b>Requires:
</b> <code>0 <= N
< I
</code>.
<br>
830 <b>Effects:
</b> Returns a
<code>const
</code> reference to the
831 <code>nth_index
<N
>::type
</code> index held by
<code>*this
</code>.
<br>
832 <b>Complexity:
</b> Constant.
<br>
835 <code>template
<typename Tag
> typename index
<Tag
>::type
& get()noexcept;
</code>
838 <b>Requires:
</b> <code>Tag
</code> is such that
<code>index
<Tag
>::type
</code>
840 <b>Effects:
</b> Returns a reference to the
841 <code>index
<Tag
>::type
</code> index held by
842 <code>*this
</code>.
<br>
843 <b>Complexity:
</b> Constant.
<br>
846 <code>template
<typename Tag
> const typename index
<Tag
>::type
& get()const noexcept;
</code>
849 <b>Requires:
</b> <code>Tag
</code> is such that
<code>index
<Tag
>::type
</code>
851 <b>Effects:
</b> Returns a
<code>const
</code> reference to the
852 <code>index
<Tag
>::type
</code> index held by
853 <code>*this
</code>.
<br>
854 <b>Complexity:
</b> Constant.
<br>
857 <h4><a name=
"projection">Projection operations
</a></h4>
860 Given a
<code>multi_index_container
</code> with indices
<code>i1
</code>
861 and
<code>i2
</code>, we say than an
<code>i1
</code>-iterator
862 <code>it1
</code> and an
<code>i2
</code>-iterator
<code>it2
</code>
863 are
<i>equivalent
</i> if:
865 <li> <code>it1==i1.end()
</code> AND
<code>it2==i2.end()
</code>,
</li>
866 <li> OR
<code>it1
</code> and
<code>it2
</code> point to the
871 <code>template
<int N,typename IteratorType
><br>
872 typename nth_index
<N
>::type::iterator project(IteratorType it);
</code>
875 <b>Requires:
</b> <code>0 <= N
< I
</code>.
<code>IteratorType
</code>
876 belongs to
<code>iterator_type_list
</code>.
<code>it
</code> is a valid
877 iterator of some index of
<code>*this
</code> (i.e. does not refer to some
878 other
<code>multi_index_container
</code>.)
<br>
879 <b>Effects:
</b> Returns an
<code>nth_index
<N
>::type::iterator
</code>
880 equivalent to
<code>it
</code>.
<br>
881 <b>Complexity:
</b> Constant.
<br>
882 <b>Exception safety:
</b> <code>nothrow
</code>.
885 <code>template
<int N,typename IteratorType
><br>
886 typename nth_index
<N
>::type::const_iterator project(IteratorType it)const;
</code>
889 <b>Requires:
</b> <code>0 <= N
< I
</code>.
<code>IteratorType
</code>
890 belongs to
<code>const_iterator_type_list
</code> or
891 <code>iterator_type_list
</code>.
<code>it
</code> is a
892 valid (constant or non-constant) iterator of some index of
<code>*this
</code>
893 (i.e. does not refer to some other
<code>multi_index_container
</code>.)
<br>
894 <b>Effects:
</b> Returns an
<code>nth_index
<N
>::type::const_iterator
</code>
895 equivalent to
<code>it
</code>.
<br>
896 <b>Complexity:
</b> Constant.
<br>
897 <b>Exception safety:
</b> <code>nothrow
</code>.
900 <code>template
<typename Tag,typename IteratorType
><br>
901 typename index
<Tag
>::type::iterator project(IteratorType it);
</code>
904 <b>Requires:
</b> <code>Tag
</code> is such that
905 <code>index
<Tag
>::type
</code> is valid.
<code>IteratorType
</code>
906 belongs to
<code>iterator_type_list
</code>.
<code>it
</code> is a valid
907 iterator of some index of
<code>*this
</code> (i.e. does not refer to some
908 other
<code>multi_index_container
</code>.)
<br>
909 <b>Effects:
</b> Returns an
<code>index
<Tag
>::type::iterator
</code>
910 equivalent to
<code>it
</code>.
<br>
911 <b>Complexity:
</b> Constant.
<br>
912 <b>Exception safety:
</b> <code>nothrow
</code>.
915 <code>template
<typename Tag,typename IteratorType
><br>
916 typename index
<Tag
>::type::const_iterator project(IteratorType it)const;
</code>
919 <b>Requires:
</b> <code>Tag
</code> is such that
920 <code>index
<Tag
>::type
</code> is valid.
<code>IteratorType
</code>
921 belongs to
<code>const_iterator_type_list
</code> or
922 <code>iterator_type_list
</code>.
<code>it
</code> is a valid
923 (constant or non-constant) iterator of some index of
<code>*this
</code>
924 (i.e. does not refer to some other
<code>multi_index_container
</code>.)
<br>
925 <b>Effects:
</b> Returns an
<code>index
<Tag
>::type::const_iterator
</code>
926 iterator equivalent to
<code>it
</code>.
<br>
927 <b>Complexity:
</b> Constant.
<br>
928 <b>Exception safety:
</b> <code>nothrow
</code>.
931 <h4><a name=
"serialization">Serialization
</a></h4>
934 <code>multi_index_container
</code>s can be archived/retrieved by means of
935 <a href=
"../../../serialization/index.html">Boost.Serialization
</a>.
936 Boost.MultiIndex does not expose a public serialization interface, as this
937 is provided by Boost.Serialization itself. Both regular and XML
938 archives are supported.
942 Each of the indices comprising a given
<code>multi_index_container
</code> contributes
943 its own preconditions as well as guarantees on the retrieved containers. In describing
944 these, the following concepts are used. A type
<code>T
</code> is
<i>serializable
</i>
945 (resp. XML-serializable) if any object of type
<code>T
</code> can be saved to an output
946 archive (XML archive) and later retrieved from an input archive (XML archive) associated to
947 the same storage. If
<code>x'
</code> of type
<code>T
</code> is loaded from the
948 serialization information saved from another object
<code>x
</code>, we say that
949 <code>x'
</code> is a
<i>restored copy
</i> of
<code>x
</code>. Given a binary predicate
950 <code>Pred
</code> over (
<code>T
</code>,
<code>T
</code>), and objects
<code>p
</code>
951 and
<code>q
</code> of type
<code>Pred
</code>, we say that
<code>q
</code>
952 is
<i>serialization-compatible
</i> with
<code>p
</code> if
954 <code>p(x,y) == q(x',y')
</code>
956 for every
<code>x
</code> and
<code>y
</code> of type
<code>T
</code> and
<code>x'
</code> and
957 <code>y'
</code> being restored copies of
<code>x
</code> and
<code>y
</code>,
961 Operation: saving of a
<code>multi_index_container
</code> <code>m
</code> to an
962 output archive (XML archive)
<code>ar
</code>.
965 <b>Requires:
</b> <code>Value
</code> is serializable (XML-serializable). Additionally,
966 each of the indices of
<code>m
</code> can impose another requirements.
<br>
967 <b>Exception safety:
</b> Strong with respect to
<code>m
</code>. If an exception
968 is thrown,
<code>ar
</code> may be left in an inconsistent state.
971 Operation: loading of a
<code>multi_index_container
</code> <code>m'
</code> from an
972 input archive (XML archive)
<code>ar
</code>.
975 <b>Requires:
</b> <code>Value
</code> is serializable (XML-serializable). Additionally,
976 each of the indices of
<code>m'
</code> can impose another requirements.
<br>
977 <b>Exception safety:
</b> Basic. If an exception is thrown,
<code>ar
</code> may be
978 left in an inconsistent state.
983 <div class=
"prev_link"><a href=
"index.html"><img src=
"../prev.gif" alt=
"Boost.MultiIndex reference" border=
"0"><br>
984 Boost.MultiIndex reference
986 <div class=
"up_link"><a href=
"index.html"><img src=
"../up.gif" alt=
"Boost.MultiIndex reference" border=
"0"><br>
987 Boost.MultiIndex reference
989 <div class=
"next_link"><a href=
"indices.html"><img src=
"../next.gif" alt=
"index reference" border=
"0"><br>
991 </a></div><br clear=
"all" style=
"clear: all;">
995 <p>Revised October
12th
2013</p>
997 <p>© Copyright
2003-
2013 Joaqu
ín M L
ópez Mu
ñoz.
998 Distributed under the Boost Software
999 License, Version
1.0. (See accompanying file
<a href=
"../../../../LICENSE_1_0.txt">
1000 LICENSE_1_0.txt
</a> or copy at
<a href=
"http://www.boost.org/LICENSE_1_0.txt">
1001 http://www.boost.org/LICENSE_1_0.txt
</a>)