]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/bimap/doc/html/boost_bimap/the_tutorial/the_collection_of_relations_type.html
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / bimap / doc / html / boost_bimap / the_tutorial / the_collection_of_relations_type.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>The collection of relations type</title>
5 <link rel="stylesheet" href="../../boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
7 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Bimap">
8 <link rel="up" href="../the_tutorial.html" title="The tutorial">
9 <link rel="prev" href="controlling_collection_types.html" title="Controlling collection types">
10 <link rel="next" href="differences_with_standard_maps.html" title="Differences with standard maps">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="controlling_collection_types.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../the_tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="differences_with_standard_maps.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section boost_bimap_the_tutorial_the_collection_of_relations_type">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_bimap.the_tutorial.the_collection_of_relations_type"></a><a class="link" href="the_collection_of_relations_type.html" title="The collection of relations type">The
28 collection of relations type</a>
29 </h3></div></div></div>
30 <div class="toc"><dl>
31 <dt><span class="section"><a href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.a_new_point_of_view">A
32 new point of view</a></span></dt>
33 <dt><span class="section"><a href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.configuration_parameters">Configuration
34 parameters</a></span></dt>
35 <dt><span class="section"><a href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.examples">Examples</a></span></dt>
36 </dl></div>
37 <div class="section boost_bimap_the_tutorial_the_collection_of_relations_type_a_new_point_of_view">
38 <div class="titlepage"><div><div><h4 class="title">
39 <a name="boost_bimap.the_tutorial.the_collection_of_relations_type.a_new_point_of_view"></a><a class="link" href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.a_new_point_of_view" title="A new point of view">A
40 new point of view</a>
41 </h4></div></div></div>
42 <p>
43 Being able to change the collection type of the bimap relation view is
44 another very important feature. Remember that this view allows the user
45 to see the container as a group of the stored relations. This view has
46 set semantics instead of map semantics.
47 </p>
48 <p>
49 <span class="inlinemediaobject"><img src="../../images/bimap/collection.type.of.relation.png" alt="collection.type.of.relation"></span>
50 </p>
51 <p>
52 By default, Boost.Bimap will base the collection type of the relation on
53 the type of the left collection. If the left collection type is a set,
54 then the collection type of the relation will be a set with the same order
55 as the left view.
56 </p>
57 <p>
58 In general, Boost.Bimap users will base the collection type of a relation
59 on the type of the collection on one of the two sides. However there are
60 times where it is useful to give this collection other constraints or simply
61 to order it differently. The user is allowed to choose between:
62 </p>
63 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
64 <li class="listitem">
65 left_based
66 </li>
67 <li class="listitem">
68 right_based
69 </li>
70 <li class="listitem">
71 set_of_relation&lt;&gt;
72 </li>
73 <li class="listitem">
74 multiset_of_relation&lt;&gt;
75 </li>
76 <li class="listitem">
77 unordered_set_of_relation&lt;&gt;
78 </li>
79 <li class="listitem">
80 unordered_multiset_of_relation&lt;&gt;
81 </li>
82 <li class="listitem">
83 list_of_relation
84 </li>
85 <li class="listitem">
86 vector_of_relation
87 </li>
88 <li class="listitem">
89 unconstrained_set_of_relation
90 </li>
91 </ul></div>
92 <div class="tip"><table border="0" summary="Tip">
93 <tr>
94 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../doc/src/images/tip.png"></td>
95 <th align="left">Tip</th>
96 </tr>
97 <tr><td align="left" valign="top"><p>
98 The first two options and the last produce faster bimaps, so prefer these
99 where possible.
100 </p></td></tr>
101 </table></div>
102 <p>
103 <span class="inlinemediaobject"><img src="../../images/bimap/more.bimap.structures.png" alt="more.bimap.structures"></span>
104 </p>
105 <p>
106 The collection type of relation can be used to create powerful containers.
107 For example, if you need to maximize search speed, then the best bidirectional
108 map possible is one that relates elements from an <code class="computeroutput"><span class="identifier">unordered_set</span></code>
109 to another <code class="computeroutput"><span class="identifier">unordered_set</span></code>.
110 The problem is that this container cannot be iterated. If you need to know
111 the list of relations inside the container, you need another collection
112 type of relation. In this case, a <code class="computeroutput"><span class="identifier">list_of_relation</span></code>
113 is a good choice. The resulting container trades insertion and deletion
114 time against fast search capabilities and the possibility of bidirectional
115 iteration.
116 </p>
117 <p>
118 <a href="../../../../example/mighty_bimap.cpp" target="_top">Go to source code</a>
119 </p>
120 <p>
121 </p>
122 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
123 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span>
124 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
125 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">list_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
126 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">unordered_set_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
127
128 <span class="keyword">struct</span> <span class="identifier">english</span> <span class="special">{};</span>
129 <span class="keyword">struct</span> <span class="identifier">spanish</span> <span class="special">{};</span>
130
131 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
132 <span class="special">{</span>
133 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bimaps</span><span class="special">;</span>
134
135 <span class="keyword">typedef</span> <span class="identifier">bimap</span>
136 <span class="special">&lt;</span>
137 <span class="identifier">unordered_set_of</span><span class="special">&lt;</span> <span class="identifier">tagged</span><span class="special">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">spanish</span> <span class="special">&gt;</span> <span class="special">&gt;,</span>
138 <span class="identifier">unordered_set_of</span><span class="special">&lt;</span> <span class="identifier">tagged</span><span class="special">&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">english</span> <span class="special">&gt;</span> <span class="special">&gt;,</span>
139 <span class="identifier">list_of_relation</span>
140
141 <span class="special">&gt;</span> <span class="identifier">translator</span><span class="special">;</span>
142
143 <span class="identifier">translator</span> <span class="identifier">trans</span><span class="special">;</span>
144
145 <span class="comment">// We have to use `push_back` because the collection of relations is</span>
146 <span class="comment">// a `list_of_relation`</span>
147
148 <span class="identifier">trans</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span> <span class="identifier">translator</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="string">"hola"</span> <span class="special">,</span><span class="string">"hello"</span> <span class="special">)</span> <span class="special">);</span>
149 <span class="identifier">trans</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span> <span class="identifier">translator</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="string">"adios"</span> <span class="special">,</span><span class="string">"goodbye"</span> <span class="special">)</span> <span class="special">);</span>
150 <span class="identifier">trans</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span> <span class="identifier">translator</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="string">"rosa"</span> <span class="special">,</span><span class="string">"rose"</span> <span class="special">)</span> <span class="special">);</span>
151 <span class="identifier">trans</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span> <span class="identifier">translator</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">(</span><span class="string">"mesa"</span> <span class="special">,</span><span class="string">"table"</span> <span class="special">)</span> <span class="special">);</span>
152
153 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"enter a word"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
154 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">word</span><span class="special">;</span>
155 <span class="identifier">std</span><span class="special">::</span><span class="identifier">getline</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">cin</span><span class="special">,</span><span class="identifier">word</span><span class="special">);</span>
156
157 <span class="comment">// Search the queried word on the from index (Spanish)</span>
158
159 <span class="identifier">translator</span><span class="special">::</span><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">spanish</span><span class="special">&gt;::</span><span class="identifier">const_iterator</span> <span class="identifier">is</span>
160 <span class="special">=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">by</span><span class="special">&lt;</span><span class="identifier">spanish</span><span class="special">&gt;().</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
161
162 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">is</span> <span class="special">!=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">by</span><span class="special">&lt;</span><span class="identifier">spanish</span><span class="special">&gt;().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
163 <span class="special">{</span>
164 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">word</span> <span class="special">&lt;&lt;</span> <span class="string">" is said "</span>
165 <span class="special">&lt;&lt;</span> <span class="identifier">is</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">english</span><span class="special">&gt;()</span>
166 <span class="special">&lt;&lt;</span> <span class="string">" in English"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
167 <span class="special">}</span>
168 <span class="keyword">else</span>
169 <span class="special">{</span>
170 <span class="comment">// Word not found in Spanish, try our luck in English</span>
171
172 <span class="identifier">translator</span><span class="special">::</span><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">english</span><span class="special">&gt;::</span><span class="identifier">const_iterator</span> <span class="identifier">ie</span>
173 <span class="special">=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">by</span><span class="special">&lt;</span><span class="identifier">english</span><span class="special">&gt;().</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
174
175 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">ie</span> <span class="special">!=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">by</span><span class="special">&lt;</span><span class="identifier">english</span><span class="special">&gt;().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
176 <span class="special">{</span>
177 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">word</span> <span class="special">&lt;&lt;</span> <span class="string">" is said "</span>
178 <span class="special">&lt;&lt;</span> <span class="identifier">ie</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">spanish</span><span class="special">&gt;()</span>
179 <span class="special">&lt;&lt;</span> <span class="string">" in Spanish"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
180 <span class="special">}</span>
181 <span class="keyword">else</span>
182 <span class="special">{</span>
183 <span class="comment">// Word not found, show the possible translations</span>
184
185 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"No such word in the dictionary"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
186 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"These are the possible translations"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
187
188 <span class="keyword">for</span><span class="special">(</span> <span class="identifier">translator</span><span class="special">::</span><span class="identifier">const_iterator</span>
189 <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span>
190 <span class="identifier">i_end</span> <span class="special">=</span> <span class="identifier">trans</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
191
192 <span class="identifier">i</span> <span class="special">!=</span> <span class="identifier">i_end</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span>
193 <span class="special">{</span>
194 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">spanish</span><span class="special">&gt;()</span>
195 <span class="special">&lt;&lt;</span> <span class="string">" &lt;---&gt; "</span>
196 <span class="special">&lt;&lt;</span> <span class="identifier">i</span><span class="special">-&gt;</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">english</span><span class="special">&gt;()</span>
197 <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
198 <span class="special">}</span>
199 <span class="special">}</span>
200 <span class="special">}</span>
201 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
202 <span class="special">}</span>
203 </pre>
204 <p>
205 </p>
206 </div>
207 <div class="section boost_bimap_the_tutorial_the_collection_of_relations_type_configuration_parameters">
208 <div class="titlepage"><div><div><h4 class="title">
209 <a name="boost_bimap.the_tutorial.the_collection_of_relations_type.configuration_parameters"></a><a class="link" href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.configuration_parameters" title="Configuration parameters">Configuration
210 parameters</a>
211 </h4></div></div></div>
212 <p>
213 Each collection type of relation has different parameters to control its
214 behaviour. For example, in the <code class="computeroutput"><span class="identifier">set_of_relation</span></code>
215 specification, you can pass a Functor type that compares two types. All
216 of the parameters are exactly as in the standard library containers, except
217 for the type, which is set to the bimap relation and the allocator type.
218 To help users in the creation of each functor, the collection type of relation
219 templates takes an mpl lambda expression where the relation type will be
220 evaluated later. A placeholder named <code class="computeroutput"><span class="identifier">_relation</span></code>
221 is available to bimap users.
222 </p>
223 <p>
224 The following table lists the meaning of the parameters for each collection
225 type of relations.
226 </p>
227 <div class="informaltable"><table class="table">
228 <colgroup>
229 <col>
230 <col>
231 </colgroup>
232 <thead><tr>
233 <th>
234 <p>
235 name
236 </p>
237 </th>
238 <th>
239 <p>
240 Additional Parameters
241 </p>
242 </th>
243 </tr></thead>
244 <tbody>
245 <tr>
246 <td>
247 <p>
248 <code class="computeroutput"><span class="identifier">left_based</span></code>
249 </p>
250 </td>
251 <td>
252 <p>
253 Not a template.
254 </p>
255 </td>
256 </tr>
257 <tr>
258 <td>
259 <p>
260 <code class="computeroutput"><span class="identifier">right_based</span></code>
261 </p>
262 </td>
263 <td>
264 <p>
265 Not a template.
266 </p>
267 </td>
268 </tr>
269 <tr>
270 <td>
271 <p>
272 <code class="computeroutput"><span class="identifier">set_of_relation</span><span class="special">&lt;</span><span class="identifier">KeyComp</span><span class="special">&gt;</span></code>
273 </p>
274 <p>
275 <code class="computeroutput"><span class="identifier">multiset_of_relation</span><span class="special">&lt;</span><span class="identifier">KeyComp</span><span class="special">&gt;</span></code>
276 </p>
277 </td>
278 <td>
279 <p>
280 <span class="bold"><strong>KeyComp </strong></span> is a Functor that compares
281 two types using less than. By default, the less-than operator
282 is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">&lt;</span><span class="identifier">_relation</span><span class="special">&gt;</span></code>.
283 </p>
284 </td>
285 </tr>
286 <tr>
287 <td>
288 <p>
289 <code class="computeroutput"><span class="identifier">unordered_set_of_relation</span><span class="special">&lt;</span><span class="identifier">HashFunctor</span><span class="special">,</span><span class="identifier">EqualKey</span><span class="special">&gt;</span></code>
290 </p>
291 <p>
292 <code class="computeroutput"><span class="identifier">unordered_multiset_of_relation</span><span class="special">&lt;</span><span class="identifier">HashFunctor</span><span class="special">,</span><span class="identifier">EqualKey</span><span class="special">&gt;</span></code>
293 </p>
294 </td>
295 <td>
296 <p>
297 <span class="bold"><strong>HashFunctor </strong></span> converts the <code class="computeroutput"><span class="identifier">relation</span></code> into an <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code> value. By default it
298 is <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">hash</span><span class="special">&lt;</span><span class="identifier">_relation</span><span class="special">&gt;</span></code>.
299 </p>
300 <p>
301 <span class="bold"><strong>EqualKey </strong></span> is a Functor that
302 tests two relations for equality. By default, the equality operator
303 is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">_relation</span><span class="special">&gt;</span></code>.
304 </p>
305 </td>
306 </tr>
307 <tr>
308 <td>
309 <p>
310 <code class="computeroutput"><span class="identifier">list_of_relation</span></code>
311 </p>
312 </td>
313 <td>
314 <p>
315 Not a template.
316 </p>
317 </td>
318 </tr>
319 <tr>
320 <td>
321 <p>
322 <code class="computeroutput"><span class="identifier">vector_of_relation</span></code>
323 </p>
324 </td>
325 <td>
326 <p>
327 Not a template.
328 </p>
329 </td>
330 </tr>
331 <tr>
332 <td>
333 <p>
334 <code class="computeroutput"><span class="identifier">unconstrained_set_of_relation</span></code>
335 </p>
336 </td>
337 <td>
338 <p>
339 Not a template.
340 </p>
341 </td>
342 </tr>
343 </tbody>
344 </table></div>
345 </div>
346 <div class="section boost_bimap_the_tutorial_the_collection_of_relations_type_examples">
347 <div class="titlepage"><div><div><h4 class="title">
348 <a name="boost_bimap.the_tutorial.the_collection_of_relations_type.examples"></a><a class="link" href="the_collection_of_relations_type.html#boost_bimap.the_tutorial.the_collection_of_relations_type.examples" title="Examples">Examples</a>
349 </h4></div></div></div>
350 <p>
351 Consider this example:
352 </p>
353 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Rel</span> <span class="special">&gt;</span>
354 <span class="keyword">struct</span> <span class="identifier">RelOrder</span>
355 <span class="special">{</span>
356 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Rel</span> <span class="identifier">ra</span><span class="special">,</span> <span class="identifier">Rel</span> <span class="identifier">rb</span><span class="special">)</span> <span class="keyword">const</span>
357 <span class="special">{</span>
358 <span class="keyword">return</span> <span class="special">(</span><span class="identifier">ra</span><span class="special">.</span><span class="identifier">left</span><span class="special">+</span><span class="identifier">ra</span><span class="special">.</span><span class="identifier">right</span><span class="special">)</span> <span class="special">&lt;</span> <span class="special">(</span><span class="identifier">rb</span><span class="special">.</span><span class="identifier">left</span><span class="special">+</span><span class="identifier">rb</span><span class="special">.</span><span class="identifier">right</span><span class="special">);</span>
359 <span class="special">}</span>
360 <span class="special">};</span>
361
362 <span class="keyword">typedef</span> <span class="identifier">bimap</span>
363 <span class="special">&lt;</span>
364 <span class="identifier">multiset_of</span><span class="special">&lt;</span> <span class="keyword">int</span> <span class="special">&gt;,</span>
365 <span class="identifier">multiset_of</span><span class="special">&lt;</span> <span class="keyword">int</span> <span class="special">&gt;,</span>
366 <span class="identifier">set_of_relation</span><span class="special">&lt;</span> <span class="identifier">RelOrder</span><span class="special">&lt;</span><span class="identifier">_relation</span><span class="special">&gt;</span> <span class="special">&gt;</span>
367
368 <span class="special">&gt;</span> <span class="identifier">bimap_type</span><span class="special">;</span>
369 </pre>
370 <p>
371 Here the bimap relation view is ordered using the information of both sides.
372 This container will only allow unique relations because <code class="computeroutput"><span class="identifier">set_of_relation</span></code>
373 has been used but the elements in each side of the bimap can be repeated.
374 </p>
375 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">name</span> <span class="special">{};</span>
376 <span class="keyword">struct</span> <span class="identifier">phone_number</span> <span class="special">{};</span>
377
378 <span class="keyword">typedef</span> <span class="identifier">bimap</span>
379 <span class="special">&lt;</span>
380 <span class="identifier">tagged</span><span class="special">&lt;</span> <span class="identifier">unordered_multiset_of</span><span class="special">&lt;</span> <span class="identifier">string</span> <span class="special">&gt;,</span> <span class="identifier">name</span> <span class="special">&gt;,</span>
381 <span class="identifier">tagged</span><span class="special">&lt;</span> <span class="identifier">unordered_set_of</span> <span class="special">&lt;</span> <span class="keyword">int</span> <span class="special">&gt;,</span> <span class="identifier">phone_number</span> <span class="special">&gt;,</span>
382 <span class="identifier">set_of_relation</span><span class="special">&lt;&gt;</span>
383
384 <span class="special">&gt;</span> <span class="identifier">bimap_type</span><span class="special">;</span>
385 </pre>
386 <p>
387 In this other case the bimap will relate names to phone numbers. Names
388 can be repeated and phone numbers are unique. You can perform quick searches
389 by name or phone number and the container can be viewed ordered using the
390 relation view.
391 </p>
392 </div>
393 </div>
394 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
395 <td align="left"></td>
396 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2012 Matias Capeletto<p>
397 Distributed under the Boost Software License, Version 1.0. (See accompanying
398 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
399 </p>
400 </div></td>
401 </tr></table>
402 <hr>
403 <div class="spirit-nav">
404 <a accesskey="p" href="controlling_collection_types.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../the_tutorial.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="differences_with_standard_maps.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
405 </div>
406 </body>
407 </html>