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