3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Bimap Reference</title>
5 <link rel="stylesheet" href="../../boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="../../index.html" title="Chapter 1. Boost.Bimap">
8 <link rel="up" href="../reference.html" title="Reference">
9 <link rel="prev" href="../reference.html" title="Reference">
10 <link rel="next" href="set_of_reference.html" title="set_of Reference">
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>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="set_of_reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_bimap.reference.bimap_reference"></a><a class="link" href="bimap_reference.html" title="Bimap Reference">Bimap Reference</a>
28 </h3></div></div></div>
30 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.view_concepts">View
31 concepts</a></span></dt>
32 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.complexity_signature"> Complexity
33 signature</a></span></dt>
34 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.set_type_specification">Set
35 type specification</a></span></dt>
36 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.tags">Tags</a></span></dt>
37 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.header__boost_bimap_bimap_hpp__synopsis">Header
38 "boost/bimap/bimap.hpp" synopsis</a></span></dt>
39 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap">Class
40 template bimap</a></span></dt>
42 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.complexity">Complexity</a></span></dt>
43 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.instantiation_types">Instantiation
45 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.nested_types">Nested
47 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.constructors__copy_and_assignment">Constructors,
48 copy and assignment</a></span></dt>
49 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.projection_operations"> Projection
50 operations</a></span></dt>
51 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.support_for_user_defined_names"> Support
52 for user defined names</a></span></dt>
53 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.serialization">Serialization</a></span></dt>
57 <div class="titlepage"><div><div><h4 class="title">
58 <a name="boost_bimap.reference.bimap_reference.view_concepts"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.view_concepts" title="View concepts">View
60 </h4></div></div></div>
62 <code class="computeroutput"><span class="identifier">bimap</span></code> instantiations comprise
63 two side views and an view of the relation specified at compile time. Each
64 view allows read-write access to the elements contained in a definite manner,
65 mathing an STL container signature.
68 Views are not isolated objects and so cannot be constructed on their own;
69 rather they are an integral part of a <code class="computeroutput"><span class="identifier">bimap</span></code>.
70 The name of the view class implementation proper is never directly exposed
71 to the user, who has access only to the associated view type specifier.
74 Insertion and deletion of elements are always performed through the appropriate
75 interface of any of the three views of the <code class="computeroutput"><span class="identifier">bimap</span></code>;
76 these operations do, however, have an impact on all other views as well:
77 for instance, insertion through a given view may fail because there exists
78 another view that forbids the operation in order to preserve its invariant
79 (such as uniqueness of elements). The global operations performed jointly
80 in the any view can be reduced to six primitives:
82 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
87 insertion of an element
90 hinted insertion, where a pre-existing element is suggested in order
91 to improve the efficiency of the operation
94 deletion of an element
97 replacement of the value of an element, which may trigger the rearrangement
98 of this element in one or more views, or may forbid the replacement
100 <li class="listitem">
101 modification of an element, and its subsequent rearrangement/banning
106 The last two primitives deserve some further explanation: in order to guarantee
107 the invariants associated to each view (e.g. some definite ordering) elements
108 of a <code class="computeroutput"><span class="identifier">bimap</span></code> are not mutable.
109 To overcome this restriction, the views expose member functions for updating
110 and modifying, which allows for the mutation of elements in a controlled
114 <div class="section">
115 <div class="titlepage"><div><div><h4 class="title">
116 <a name="boost_bimap.reference.bimap_reference.complexity_signature"></a><a name="complexity_signature_explanation"></a> <a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.complexity_signature" title="Complexity signature">Complexity
118 </h4></div></div></div>
120 Some member functions of a view interface are implemented by global primitives
121 from the above list. The complexity of these operations thus depends on
122 all views of a given <code class="computeroutput"><span class="identifier">bimap</span></code>,
123 not just the currently used view.
126 In order to establish complexity estimates, a view is characterised by
127 its complexity signature, consisting of the following associated functions
128 on the number of elements:
130 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
131 <li class="listitem">
132 <code class="computeroutput"><span class="identifier">c</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
135 <li class="listitem">
136 <code class="computeroutput"><span class="identifier">i</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
139 <li class="listitem">
140 <code class="computeroutput"><span class="identifier">h</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
143 <li class="listitem">
144 <code class="computeroutput"><span class="identifier">d</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
147 <li class="listitem">
148 <code class="computeroutput"><span class="identifier">r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
151 <li class="listitem">
152 <code class="computeroutput"><span class="identifier">m</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>:
157 If the collection type of the relation is <code class="computeroutput"><span class="identifier">left_based</span></code>
158 or <code class="computeroutput"><span class="identifier">right_based</span></code>, and we
159 use an <code class="computeroutput"><span class="identifier">l</span></code> subscript to denote
160 the left view and an <code class="computeroutput"><span class="identifier">r</span></code>
161 for the right view, then the insertion of an element in such a container
162 is of complexity <code class="computeroutput"><span class="identifier">O</span><span class="special">(</span><span class="identifier">i_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)+</span><span class="identifier">i_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">))</span></code>,
163 where n is the number of elements. If the collection type of relation is
164 not side-based, then there is an additional term to add that is contributed
165 by the collection type of relation view. Using <code class="computeroutput"><span class="identifier">a</span></code>
166 to denote the above view, the complexity of insertion will now be <code class="computeroutput"><span class="identifier">O</span><span class="special">(</span><span class="identifier">i_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)+</span><span class="identifier">i_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)+</span><span class="identifier">i_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">))</span></code>.
167 To abbreviate the notation, we adopt the following definitions:
169 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
170 <li class="listitem">
171 <code class="computeroutput"><span class="identifier">C</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">c_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">c_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">c_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
173 <li class="listitem">
174 <code class="computeroutput"><span class="identifier">I</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">i_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">i_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">i_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
176 <li class="listitem">
177 <code class="computeroutput"><span class="identifier">H</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">h_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">h_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">h_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
179 <li class="listitem">
180 <code class="computeroutput"><span class="identifier">D</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">d_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">d_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">d_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
182 <li class="listitem">
183 <code class="computeroutput"><span class="identifier">R</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">r_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">r_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">r_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
185 <li class="listitem">
186 <code class="computeroutput"><span class="identifier">M</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">m_l</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">m_r</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">[</span> <span class="special">+</span> <span class="identifier">m_a</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special">]</span></code>
190 <div class="section">
191 <div class="titlepage"><div><div><h4 class="title">
192 <a name="boost_bimap.reference.bimap_reference.set_type_specification"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.set_type_specification" title="Set type specification">Set
193 type specification</a>
194 </h4></div></div></div>
196 Set type specifiers are passed as instantiation arguments to <code class="computeroutput"><span class="identifier">bimap</span></code> and provide the information needed
197 to incorporate the corresponding views. Currently, Boost.Bimap provides
198 the collection type specifiers. The <span class="emphasis"><em>side collection type</em></span>
199 specifiers define the constraints of the two map views of the bimap. The
200 <span class="emphasis"><em>collection type of relation</em></span> specifier defines the
201 main set view constraints. If <code class="computeroutput"><span class="identifier">left_based</span></code>
202 (the default parameter) or <code class="computeroutput"><span class="identifier">right_based</span></code>
203 is used, then the collection type of relation will be based on the left
204 or right collection type correspondingly.
206 <div class="informaltable"><table class="table">
220 Collection type of relation
233 <code class="computeroutput"><span class="identifier">set_of</span></code>
238 <code class="computeroutput"><span class="identifier">set_of_relation</span></code>
243 <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">set_of</span><span class="special">.</span><span class="identifier">hpp</span></code>
250 <code class="computeroutput"><span class="identifier">multiset_of</span></code>
255 <code class="computeroutput"><span class="identifier">multiset_of_relation</span></code>
260 <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">multiset_of</span><span class="special">.</span><span class="identifier">hpp</span></code>
267 <code class="computeroutput"><span class="identifier">unordered_set_of</span></code>
272 <code class="computeroutput"><span class="identifier">unordered_set_of_relation</span></code>
277 <code class="computeroutput"><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></code>
284 <code class="computeroutput"><span class="identifier">unordered_multiset_of</span></code>
289 <code class="computeroutput"><span class="identifier">unordered_multiset_of_relation</span></code>
294 <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">unordered_multiset_of</span><span class="special">.</span><span class="identifier">hpp</span></code>
301 <code class="computeroutput"><span class="identifier">list_of</span></code>
306 <code class="computeroutput"><span class="identifier">list_of_relation</span></code>
311 <code class="computeroutput"><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></code>
318 <code class="computeroutput"><span class="identifier">vector_of</span></code>
323 <code class="computeroutput"><span class="identifier">vector_of_relation</span></code>
328 <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">vector_of</span><span class="special">.</span><span class="identifier">hpp</span></code>
335 <code class="computeroutput"><span class="identifier">unconstrained_set_of</span></code>
340 <code class="computeroutput"><span class="identifier">unconstrained_set_of_relation</span></code>
345 <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">bimap</span><span class="special">/</span><span class="identifier">unconstrained_set_of</span><span class="special">.</span><span class="identifier">hpp</span></code>
354 <code class="computeroutput"><span class="identifier">left_based</span></code>
359 <code class="computeroutput"><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></code>
368 <code class="computeroutput"><span class="identifier">right_based</span></code>
373 <code class="computeroutput"><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></code>
380 <div class="section">
381 <div class="titlepage"><div><div><h4 class="title">
382 <a name="boost_bimap.reference.bimap_reference.tags"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.tags" title="Tags">Tags</a>
383 </h4></div></div></div>
385 Tags are just conventional types used as mnemonics for the types stored
386 in a <code class="computeroutput"><span class="identifier">bimap</span></code>. Boost.Bimap
387 uses the tagged idiom to let the user specify this tags.
390 <div class="section">
391 <div class="titlepage"><div><div><h4 class="title">
392 <a name="boost_bimap.reference.bimap_reference.header__boost_bimap_bimap_hpp__synopsis"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.header__boost_bimap_bimap_hpp__synopsis" title='Header "boost/bimap/bimap.hpp" synopsis'>Header
393 "boost/bimap/bimap.hpp" synopsis</a>
394 </h4></div></div></div>
395 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
396 <span class="keyword">namespace</span> <span class="identifier">bimaps</span> <span class="special">{</span>
398 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span> <span class="special">></span>
399 <span class="keyword">struct</span> <span class="identifier">tagged</span><span class="special">;</span>
401 <span class="comment">// bimap template class
403 <span class="keyword">template</span>
404 <span class="special"><</span>
405 <span class="keyword">class</span> <span class="identifier">LeftCollectionType</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">RightCollectionType</span><span class="special">,</span>
407 <span class="keyword">class</span> <span class="identifier">AdditionalParameter_1</span> <span class="special">=</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">not_specified</span><span class="special">,</span>
408 <span class="keyword">class</span> <span class="identifier">AdditionalParameter_2</span> <span class="special">=</span> <span class="identifier">detail</span><span class="special">::</span><span class="identifier">not_specified</span>
409 <span class="special">></span>
410 <span class="keyword">class</span> <span class="identifier">bimap</span> <span class="emphasis"><em>- implementation defined { : public SetView } -</em></span>
411 <span class="special">{</span>
412 <span class="keyword">public</span><span class="special">:</span>
414 <span class="comment">// Metadata
416 <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">left_tag</span><span class="special">;</span>
417 <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">left_map</span><span class="special">;</span>
419 <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">right_tag</span><span class="special">;</span>
420 <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">right_map</span><span class="special">;</span>
422 <span class="comment">// Shortcuts
423 </span> <span class="comment">// typedef -side-_map::-type- -side-_-type-;
425 <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">info_type</span><span class="special">;</span>
427 <span class="comment">// Map views
429 <span class="identifier">left_map</span> <span class="identifier">left</span><span class="special">;</span>
430 <span class="identifier">right_map</span> <span class="identifier">right</span><span class="special">;</span>
432 <span class="comment">// Constructors
434 <span class="identifier">bimap</span><span class="special">();</span>
436 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">InputIterator</span> <span class="special">></span>
437 <span class="identifier">bimap</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>
439 <span class="identifier">bimap</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">bimap</span> <span class="special">&);</span>
441 <span class="identifier">bimap</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">bimap</span><span class="special">&</span> <span class="identifier">b</span><span class="special">);</span>
443 <span class="comment">// Projection of iterators
445 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
446 <span class="identifier">left_iterator</span> <span class="identifier">project_left</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
448 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
449 <span class="identifier">left_const_iterator</span> <span class="identifier">project_left</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
451 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
452 <span class="identifier">right_iterator</span> <span class="identifier">project_right</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
454 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
455 <span class="identifier">right_const_iterator</span> <span class="identifier">project_right</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
457 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
458 <span class="identifier">iterator</span> <span class="identifier">project_up</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
460 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
461 <span class="identifier">const_iterator</span> <span class="identifier">project_up</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
463 <span class="comment">// Support for tags
465 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
466 <span class="keyword">struct</span> <span class="identifier">map_by</span><span class="special">;</span>
468 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
469 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">by</span><span class="special">();</span>
471 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
472 <span class="keyword">const</span> <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span> <span class="special">&</span> <span class="identifier">by</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
474 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
475 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">project</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
477 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
478 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">const_iterator</span> <span class="identifier">project</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span>
480 <span class="special">};</span>
483 <span class="special">}</span> <span class="comment">// namespace bimap
484 </span><span class="special">}</span> <span class="comment">// namespace boost
487 <div class="section">
488 <div class="titlepage"><div><div><h4 class="title">
489 <a name="boost_bimap.reference.bimap_reference.class_template_bimap"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap" title="Class template bimap">Class
491 </h4></div></div></div>
492 <div class="toc"><dl>
493 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.complexity">Complexity</a></span></dt>
494 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.instantiation_types">Instantiation
495 types</a></span></dt>
496 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.nested_types">Nested
497 types</a></span></dt>
498 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.constructors__copy_and_assignment">Constructors,
499 copy and assignment</a></span></dt>
500 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.projection_operations"> Projection
501 operations</a></span></dt>
502 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.support_for_user_defined_names"> Support
503 for user defined names</a></span></dt>
504 <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.serialization">Serialization</a></span></dt>
507 This is the main component of Boost.Bimap.
509 <div class="section">
510 <div class="titlepage"><div><div><h5 class="title">
511 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.complexity"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.complexity" title="Complexity">Complexity</a>
512 </h5></div></div></div>
514 In the descriptions of the operations of <code class="computeroutput"><span class="identifier">bimap</span></code>,
515 we adopt the scheme outlined in the complexity signature section.
518 <div class="section">
519 <div class="titlepage"><div><div><h5 class="title">
520 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.instantiation_types"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.instantiation_types" title="Instantiation types">Instantiation
522 </h5></div></div></div>
524 <code class="computeroutput"><span class="identifier">bimap</span></code> is instantiated
525 with the following types:
527 <div class="orderedlist"><ol class="orderedlist" type="1">
528 <li class="listitem">
529 LeftCollectionType and RightCollectionType are collection type specifications
530 optionally tagged, or any type optionally tagged, in which case that
533 <li class="listitem">
535 AdditionalParameter_{1/2} can be any ordered subset of:
537 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
538 <li class="listitem">
539 CollectionTypeOfRelation specification
541 <li class="listitem">
548 <div class="section">
549 <div class="titlepage"><div><div><h5 class="title">
550 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.nested_types"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.nested_types" title="Nested types">Nested
552 </h5></div></div></div>
553 <pre class="programlisting"><span class="identifier">left_tag</span><span class="special">,</span> <span class="identifier">right_tag</span>
555 <div class="blockquote"><blockquote class="blockquote"><p>
556 Tags for each side of the bimap. If the user has not specified any
557 tag the tags default to <code class="computeroutput"><span class="identifier">member_at</span><span class="special">::</span><span class="identifier">left</span></code>
558 and <code class="computeroutput"><span class="identifier">member_at</span><span class="special">::</span><span class="identifier">right</span></code>.
559 </p></blockquote></div>
560 <pre class="programlisting"><span class="identifier">left_key_type</span><span class="special">,</span> <span class="identifier">right_key_type</span>
562 <div class="blockquote"><blockquote class="blockquote"><p>
563 Key type of each side. In a <code class="computeroutput"><span class="identifier">bimap</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span><span class="identifier">B</span><span class="special">></span> </code> <code class="computeroutput"><span class="identifier">left_key_type</span></code>
564 is <code class="computeroutput"><span class="identifier">A</span></code> and <code class="computeroutput"><span class="identifier">right_key_type</span></code> is <code class="computeroutput"><span class="identifier">B</span></code>.
565 If there are tags, it is better to use: <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">key_type</span></code>.
566 </p></blockquote></div>
567 <pre class="programlisting"><span class="identifier">left_data_type</span><span class="special">,</span> <span class="identifier">right_data_type</span>
569 <div class="blockquote"><blockquote class="blockquote"><p>
570 Data type of each side. In a bimap<A,B> left_key_type is B and
571 right_key_type is A. If there are tags, it is better to use: <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">data_type</span></code>.
572 </p></blockquote></div>
573 <pre class="programlisting"><span class="identifier">left_value_type</span><span class="special">,</span> <span class="identifier">right_value_type</span>
575 <div class="blockquote"><blockquote class="blockquote"><p>
576 Value type used for the views. If there are tags, it is better to use:
577 <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">value_type</span></code>.
578 </p></blockquote></div>
579 <pre class="programlisting"><span class="identifier">left_iterator</span><span class="special">,</span> <span class="identifier">right_iterator</span>
580 <span class="identifier">left_const_iterator</span><span class="special">,</span> <span class="identifier">right_const_iterator</span>
582 <div class="blockquote"><blockquote class="blockquote"><p>
583 Iterators of the views. If there are tags, it is better to use: <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">iterator</span></code> and <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">const_iterator</span></code>
584 </p></blockquote></div>
585 <pre class="programlisting"><span class="identifier">left_map</span><span class="special">,</span> <span class="identifier">right_map</span>
587 <div class="blockquote"><blockquote class="blockquote"><p>
588 Map view type of each side. If there are tags, it is better to use:
589 <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span></code>.
590 </p></blockquote></div>
592 <div class="section">
593 <div class="titlepage"><div><div><h5 class="title">
594 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.constructors__copy_and_assignment"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.constructors__copy_and_assignment" title="Constructors, copy and assignment">Constructors,
595 copy and assignment</a>
596 </h5></div></div></div>
597 <pre class="programlisting"><span class="identifier">bimap</span><span class="special">();</span>
599 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
600 <li class="listitem">
601 <span class="bold"><strong>Effects:</strong></span> Constructs an empty <code class="computeroutput"><span class="identifier">bimap</span></code>.
603 <li class="listitem">
604 <span class="bold"><strong>Complexity:</strong></span> Constant.
607 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">></span>
608 <span class="identifier">bimap</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>
610 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
611 <li class="listitem">
612 <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">InputIterator</span></code>
613 is a model of Input Iterator over elements of type <code class="computeroutput"><span class="identifier">relation</span></code> or a type convertible
614 to <code class="computeroutput"><span class="identifier">relation</span></code>. last
615 is reachable from <code class="computeroutput"><span class="identifier">first</span></code>.
617 <li class="listitem">
618 <span class="bold"><strong>Effects:</strong></span> Constructs an empty <code class="computeroutput"><span class="identifier">bimap</span></code> and fills it with the elements
619 in the range <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">)</span></code>. Insertion of each element may or
620 may not succeed depending on acceptance by the collection types of
621 the <code class="computeroutput"><span class="identifier">bimap</span></code>.
623 <li class="listitem">
624 <a class="link" href="bimap_reference.html#complexity_signature_explanation"><span class="bold"><strong>Complexity:</strong></span></a>
625 O(m*H(m)), where m is the number of elements in <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span><span class="identifier">last</span><span class="special">)</span></code>.
628 <pre class="programlisting"><span class="identifier">bimap</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">bimap</span> <span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
630 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
631 <li class="listitem">
632 <span class="bold"><strong>Effects:</strong></span> Constructs a copy of x,
633 copying its elements as well as its internal objects (key extractors,
634 comparison objects, allocator.)
636 <li class="listitem">
637 <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span>
638 <span class="identifier">x</span></code>. The order of the views
639 of the <code class="computeroutput"><span class="identifier">bimap</span></code> is preserved
642 <li class="listitem">
643 <span class="bold"><strong>Complexity:</strong></span> O(x.size()*log(x.size())
647 <pre class="programlisting"><span class="special">~</span><span class="identifier">bimap</span><span class="special">()</span>
649 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
650 <li class="listitem">
651 <span class="bold"><strong>Effects:</strong></span> Destroys the <code class="computeroutput"><span class="identifier">bimap</span></code> and all the elements contained.
652 The order in which the elements are destroyed is not specified.
654 <li class="listitem">
655 <span class="bold"><strong>Complexity:</strong></span> O(n).
658 <pre class="programlisting"><span class="identifier">bimap</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">bimap</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span>
660 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
661 <li class="listitem">
662 <span class="bold"><strong>Effects:</strong></span> Replaces the elements and
663 internal objects of the <code class="computeroutput"><span class="identifier">bimap</span></code>
666 <li class="listitem">
667 <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span><span class="special">==</span><span class="identifier">x</span></code>. The order on the views of the
668 <code class="computeroutput"><span class="identifier">bimap</span></code> is preserved
671 <li class="listitem">
672 <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
674 <li class="listitem">
675 <span class="bold"><strong>Complexity:</strong></span> O(n + x.size()*log(x.size())
678 <li class="listitem">
679 <span class="bold"><strong>Exception safety:</strong></span> Strong, provided
680 the copy and assignment operations of the types of <code class="computeroutput"><span class="identifier">ctor_args_list</span></code> do not throw.
684 <div class="section">
685 <div class="titlepage"><div><div><h5 class="title">
686 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.projection_operations"></a><a name="reference_projection_operations"></a> <a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.projection_operations" title="Projection operations">Projection
688 </h5></div></div></div>
690 Given a <code class="computeroutput"><span class="identifier">bimap</span></code> with views
691 v1 and v2, we say than an v1-iterator it1 and an v2-iterator it2 are
694 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
695 <li class="listitem">
696 <code class="computeroutput"><span class="identifier">it1</span> <span class="special">==</span>
697 <span class="identifier">i1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
698 AND <code class="computeroutput"><span class="identifier">it2</span> <span class="special">==</span>
699 <span class="identifier">i2</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>,
701 <li class="listitem">
702 OR <code class="computeroutput"><span class="identifier">it1</span></code> and <code class="computeroutput"><span class="identifier">it2</span></code> point to the same element.
705 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
706 <span class="identifier">left_iterator</span> <span class="identifier">project_left</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
708 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
709 <span class="identifier">left_const_iterator</span> <span class="identifier">project_left</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
711 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
712 <li class="listitem">
713 <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
714 is a bimap view iterator. it is a valid iterator of some view of
715 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
716 (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
718 <li class="listitem">
719 <span class="bold"><strong>Effects:</strong></span> Returns a left map view
720 iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
722 <li class="listitem">
723 <span class="bold"><strong>Complexity:</strong></span> Constant.
725 <li class="listitem">
726 <span class="bold"><strong>Exception safety:</strong></span> nothrow.
729 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
730 <span class="identifier">right_iterator</span> <span class="identifier">project_right</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
732 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
733 <span class="identifier">right_const_iterator</span> <span class="identifier">project_right</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
735 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
736 <li class="listitem">
737 <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
738 is a bimap view iterator. it is a valid iterator of some view of
739 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
740 (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
742 <li class="listitem">
743 <span class="bold"><strong>Effects:</strong></span> Returns a right map view
744 iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
746 <li class="listitem">
747 <span class="bold"><strong>Complexity:</strong></span> Constant.
749 <li class="listitem">
750 <span class="bold"><strong>Exception safety:</strong></span> nothrow.
753 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
754 <span class="identifier">iterator</span> <span class="identifier">project_up</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
756 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
757 <span class="identifier">const_iterator</span> <span class="identifier">project_up</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
759 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
760 <li class="listitem">
761 <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
762 is a bimap view iterator. it is a valid iterator of some view of
763 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
764 (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
766 <li class="listitem">
767 <span class="bold"><strong>Effects:</strong></span> Returns a collection of
768 relations view iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
770 <li class="listitem">
771 <span class="bold"><strong>Complexity:</strong></span> Constant.
773 <li class="listitem">
774 <span class="bold"><strong>Exception safety:</strong></span> nothrow.
778 <div class="section">
779 <div class="titlepage"><div><div><h5 class="title">
780 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.support_for_user_defined_names"></a><a name="reference_support_for_used_defined_names"></a> <a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.support_for_user_defined_names" title="Support for user defined names">Support
781 for user defined names</a>
782 </h5></div></div></div>
783 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
784 <span class="keyword">struct</span> <span class="identifier">map_by</span><span class="special">;</span>
786 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
787 <li class="listitem">
788 <code class="computeroutput"><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span></code> yields the type of the map
789 view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>.
790 <code class="computeroutput"><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span></code><span class="emphasis"><em>-type
791 name-</em></span> is the same as <code class="computeroutput"><span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span><span class="special">::</span></code><span class="emphasis"><em>-type name-</em></span>.
793 <li class="listitem">
794 <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
795 is a valid user defined name of the bimap.
798 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
799 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">by</span><span class="special">();</span>
801 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">></span>
802 <span class="keyword">const</span> <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">type</span> <span class="special">&</span> <span class="identifier">by</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
804 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
805 <li class="listitem">
806 <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
807 is a valid user defined name of the bimap.
809 <li class="listitem">
810 <span class="bold"><strong>Effects:</strong></span> Returns a reference to
811 the map view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>
812 held by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
814 <li class="listitem">
815 <span class="bold"><strong>Complexity:</strong></span> Constant.
817 <li class="listitem">
818 <span class="bold"><strong>Exception safety:</strong></span> nothrow.
821 <pre class="programlisting"><span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
822 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">project</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">);</span>
824 <span class="keyword">template</span><span class="special"><</span> <span class="keyword">class</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">></span>
825 <span class="identifier">map_by</span><span class="special"><</span><span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">const_iterator</span> <span class="identifier">project</span><span class="special">(</span><span class="identifier">IteratorType</span> <span class="identifier">iter</span><span class="special">)</span> <span class="keyword">const</span>
827 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
828 <li class="listitem">
829 <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
830 is a valid user defined name of the bimap. <code class="computeroutput"><span class="identifier">IteratorType</span></code>
831 is a bimap view iterator. it is a valid iterator of some view of
832 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
833 (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
835 <li class="listitem">
836 <span class="bold"><strong>Effects:</strong></span> Returns a reference to
837 the map view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>
838 held by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
840 <li class="listitem">
841 <span class="bold"><strong>Complexity:</strong></span> Constant.
843 <li class="listitem">
844 <span class="bold"><strong>Exception safety:</strong></span> nothrow.
848 <div class="section">
849 <div class="titlepage"><div><div><h5 class="title">
850 <a name="boost_bimap.reference.bimap_reference.class_template_bimap.serialization"></a><a class="link" href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.serialization" title="Serialization">Serialization</a>
851 </h5></div></div></div>
853 A <code class="computeroutput"><span class="identifier">bimap</span></code> can be archived
854 and retrieved by means of <a href="http://www.boost.org/libs/serialization/doc/index.html" target="_top"><span class="bold"><strong>Boost.Serialization</strong></span></a>. Boost.Bimap does
855 not expose a public serialisation interface, as this is provided by Boost.Serialization
856 itself. Both regular and XML archives are supported.
859 Each of the set specifications comprising a given <code class="computeroutput"><span class="identifier">bimap</span></code>
860 contributes its own preconditions as well as guarantees on the retrieved
861 containers. In describing these, the following concepts are used. A type
862 <code class="computeroutput"><span class="identifier">T</span></code> is <span class="emphasis"><em>serializable</em></span>
863 (resp. XML-serializable) if any object of type <code class="computeroutput"><span class="identifier">T</span></code>
864 can be saved to an output archive (XML archive) and later retrieved from
865 an input archive (XML archive) associated to the same storage. If <code class="computeroutput"><span class="identifier">x</span></code>' of type <code class="computeroutput"><span class="identifier">T</span></code>
866 is loaded from the serialization information saved from another object
867 x, we say that x' is a <span class="emphasis"><em>restored copy</em></span> of x. Given
868 a <a href="http://www.sgi.com/tech/stl/BinaryPredicate.html" target="_top">Binary
869 Predicate</a> <code class="computeroutput"><span class="identifier">Pred</span></code>
870 over <code class="computeroutput"><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span><span class="special">)</span></code>, and objects <code class="computeroutput"><span class="identifier">p</span></code>
871 and <code class="computeroutput"><span class="identifier">q</span></code> of type <code class="computeroutput"><span class="identifier">Pred</span></code>, we say that <code class="computeroutput"><span class="identifier">q</span></code>
872 is <span class="emphasis"><em>serialization-compatible</em></span> with <code class="computeroutput"><span class="identifier">p</span></code>
875 <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
876 <code class="computeroutput"><span class="identifier">p</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span><span class="identifier">y</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">q</span><span class="special">(</span><span class="identifier">x</span></code>'<code class="computeroutput"><span class="special">,</span><span class="identifier">y</span></code>'<code class="computeroutput"><span class="special">)</span></code>
879 for every <code class="computeroutput"><span class="identifier">x</span></code> and <code class="computeroutput"><span class="identifier">y</span></code> of type <code class="computeroutput"><span class="identifier">T</span></code>
880 and <code class="computeroutput"><span class="identifier">x</span></code>' and <code class="computeroutput"><span class="identifier">y</span></code>' being restored copies of <code class="computeroutput"><span class="identifier">x</span></code> and <code class="computeroutput"><span class="identifier">y</span></code>,
883 <div class="sidebar">
884 <div class="titlepage"></div>
886 <span class="bold"><strong>Operation:</strong></span> saving of a <code class="computeroutput"><span class="identifier">bimap</span> <span class="identifier">b</span></code>
887 to an output archive (XML archive) ar.
890 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
891 <li class="listitem">
892 <span class="bold"><strong>Requires:</strong></span> Value is serializable
893 (XML-serializable). Additionally, each of the views of b can impose
896 <li class="listitem">
897 <span class="bold"><strong>Exception safety:</strong></span> Strong with respect
898 to <code class="computeroutput"><span class="identifier">b</span></code>. If an exception
899 is thrown, ar may be left in an inconsistent state.
902 <div class="sidebar">
903 <div class="titlepage"></div>
905 <span class="bold"><strong>Operation:</strong></span> loading of a <code class="computeroutput"><span class="identifier">bimap</span></code> m' from an input archive (XML
909 <div class="itemizedlist"><ul class="itemizedlist" type="disc">
910 <li class="listitem">
911 <span class="bold"><strong>Requires:</strong></span> Value is serializable
912 (XML-serializable). Additionally, each of the views of <code class="computeroutput"><span class="identifier">b</span></code>' can impose other requirements.
914 <li class="listitem">
915 <span class="bold"><strong>Exception safety:</strong></span> Basic. If an exception
916 is thrown, ar may be left in an inconsistent state.
922 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
923 <td align="left"></td>
924 <td align="right"><div class="copyright-footer">Copyright © 2006 -2007 Matias Capeletto<p>
925 Distributed under the Boost Software License, Version 1.0. (See accompanying
926 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>)
931 <div class="spirit-nav">
932 <a accesskey="p" href="../reference.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="set_of_reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>