]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/bimap/doc/html/boost_bimap/examples/multiindex_to_bimap_path___bidirectional_map.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / bimap / doc / html / boost_bimap / examples / multiindex_to_bimap_path___bidirectional_map.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>MultiIndex to Bimap Path - Bidirectional Map</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="../examples.html" title="Examples">
9 <link rel="prev" href="mighty_bimap.html" title="Mighty Bimap">
10 <link rel="next" href="multiindex_to_bimap_path___hashed_indices.html" title="MultiIndex to Bimap Path - Hashed indices">
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="mighty_bimap.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="multiindex_to_bimap_path___hashed_indices.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section boost_bimap_examples_multiindex_to_bimap_path___bidirectional_map">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map"></a><a class="link" href="multiindex_to_bimap_path___bidirectional_map.html" title="MultiIndex to Bimap Path - Bidirectional Map">MultiIndex
28 to Bimap Path - Bidirectional Map</a>
29 </h3></div></div></div>
30 <p>
31 This is example 4 in Boost.MultiIndex documentation.
32 </p>
33 <div class="sidebar">
34 <div class="titlepage"></div>
35 <p>
36 This example shows how to construct a bidirectional map with multi_index_container.
37 By a bidirectional map we mean a container of elements of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">FromType</span><span class="special">,</span><span class="keyword">const</span> <span class="identifier">ToType</span><span class="special">&gt;</span></code> such that no two elements exists with
38 the same first or second value (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span></code> only
39 guarantees uniqueness of the first member). Fast look-up is provided for
40 both keys. The program features a tiny Spanish-English dictionary with on-line
41 query of words in both languages.
42 </p>
43 </div>
44 <h5>
45 <a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.h0"></a>
46 <span class="phrase"><a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.boost_multiindex"></a></span><a class="link" href="multiindex_to_bimap_path___bidirectional_map.html#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.boost_multiindex">Boost.MultiIndex</a>
47 </h5>
48 <p>
49 <a href="../../../../example/mi_to_b_path/mi_bidirectional_map.cpp" target="_top">Go to source
50 code</a>
51 </p>
52 <p>
53 </p>
54 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
55 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">tokenizer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
56
57 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multi_index_container</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
58 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multi_index</span><span class="special">/</span><span class="identifier">key_extractors</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
59 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">multi_index</span><span class="special">/</span><span class="identifier">ordered_index</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
60
61 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">;</span>
62 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">multi_index</span><span class="special">;</span>
63
64 <span class="comment">// tags for accessing both sides of a bidirectional map</span>
65
66 <span class="keyword">struct</span> <span class="identifier">from</span> <span class="special">{};</span>
67 <span class="keyword">struct</span> <span class="identifier">to</span> <span class="special">{};</span>
68
69 <span class="comment">// The class template bidirectional_map wraps the specification</span>
70 <span class="comment">// of a bidirectional map based on multi_index_container.</span>
71
72 <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">FromType</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">ToType</span><span class="special">&gt;</span>
73 <span class="keyword">struct</span> <span class="identifier">bidirectional_map</span>
74 <span class="special">{</span>
75 <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="identifier">FromType</span><span class="special">,</span><span class="identifier">ToType</span><span class="special">&gt;</span> <span class="identifier">value_type</span><span class="special">;</span>
76
77 <span class="keyword">typedef</span> <span class="identifier">multi_index_container</span><span class="special">&lt;</span>
78 <span class="identifier">value_type</span><span class="special">,</span>
79 <span class="identifier">indexed_by</span>
80 <span class="special">&lt;</span>
81 <span class="identifier">ordered_unique</span>
82 <span class="special">&lt;</span>
83 <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">from</span><span class="special">&gt;,</span> <span class="identifier">member</span><span class="special">&lt;</span><span class="identifier">value_type</span><span class="special">,</span><span class="identifier">FromType</span><span class="special">,&amp;</span><span class="identifier">value_type</span><span class="special">::</span><span class="identifier">first</span><span class="special">&gt;</span>
84 <span class="special">&gt;,</span>
85 <span class="identifier">ordered_unique</span>
86 <span class="special">&lt;</span>
87 <span class="identifier">tag</span><span class="special">&lt;</span><span class="identifier">to</span><span class="special">&gt;,</span> <span class="identifier">member</span><span class="special">&lt;</span><span class="identifier">value_type</span><span class="special">,</span><span class="identifier">ToType</span><span class="special">,&amp;</span><span class="identifier">value_type</span><span class="special">::</span><span class="identifier">second</span><span class="special">&gt;</span>
88 <span class="special">&gt;</span>
89 <span class="special">&gt;</span>
90
91 <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
92
93 <span class="special">};</span>
94
95 <span class="comment">// A dictionary is a bidirectional map from strings to strings</span>
96
97 <span class="keyword">typedef</span> <span class="identifier">bidirectional_map</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">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">dictionary</span><span class="special">;</span>
98
99 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
100 <span class="special">{</span>
101 <span class="identifier">dictionary</span> <span class="identifier">d</span><span class="special">;</span>
102
103 <span class="comment">// Fill up our microdictionary.</span>
104 <span class="comment">// first members Spanish, second members English.</span>
105
106 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">dictionary</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>
107 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">dictionary</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>
108 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">dictionary</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>
109 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">dictionary</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>
110
111 <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>
112 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">word</span><span class="special">;</span>
113 <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>
114
115 <span class="comment">// search the queried word on the from index (Spanish)</span>
116
117 <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">from</span><span class="special">&gt;().</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
118
119 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
120 <span class="special">{</span>
121 <span class="comment">// the second part of the element is the equivalent in English</span>
122
123 <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>
124 <span class="special">&lt;&lt;</span> <span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">second</span> <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>
125 <span class="special">}</span>
126 <span class="keyword">else</span>
127 <span class="special">{</span>
128 <span class="comment">// word not found in Spanish, try our luck in English</span>
129
130 <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">index_iterator</span><span class="special">&lt;</span><span class="identifier">to</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">it2</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">to</span><span class="special">&gt;().</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
131 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it2</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">to</span><span class="special">&gt;().</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
132 <span class="special">{</span>
133 <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>
134 <span class="special">&lt;&lt;</span> <span class="identifier">it2</span><span class="special">-&gt;</span><span class="identifier">first</span> <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>
135 <span class="special">}</span>
136 <span class="keyword">else</span>
137 <span class="special">{</span>
138 <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>
139 <span class="special">}</span>
140 <span class="special">}</span>
141
142 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
143 <span class="special">}</span>
144 </pre>
145 <p>
146 </p>
147 <h5>
148 <a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.h1"></a>
149 <span class="phrase"><a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.boost_bimap"></a></span><a class="link" href="multiindex_to_bimap_path___bidirectional_map.html#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.boost_bimap">Boost.Bimap</a>
150 </h5>
151 <p>
152 <a href="../../../../example/mi_to_b_path/bidirectional_map.cpp" target="_top">Go to source
153 code</a>
154 </p>
155 <p>
156 </p>
157 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
158 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">tokenizer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
159 <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>
160
161 <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>
162
163 <span class="comment">// A dictionary is a bidirectional map from strings to strings</span>
164
165 <span class="keyword">typedef</span> <span class="identifier">bimap</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">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">dictionary</span><span class="special">;</span>
166 <span class="keyword">typedef</span> <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">translation</span><span class="special">;</span>
167
168 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
169 <span class="special">{</span>
170 <span class="identifier">dictionary</span> <span class="identifier">d</span><span class="special">;</span>
171
172 <span class="comment">// Fill up our microdictionary.</span>
173 <span class="comment">// first members Spanish, second members English.</span>
174
175 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"hola"</span> <span class="special">,</span><span class="string">"hello"</span> <span class="special">));</span>
176 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"adios"</span><span class="special">,</span><span class="string">"goodbye"</span><span class="special">));</span>
177 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"rosa"</span> <span class="special">,</span><span class="string">"rose"</span> <span class="special">));</span>
178 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"mesa"</span> <span class="special">,</span><span class="string">"table"</span> <span class="special">));</span>
179
180 <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>
181 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">word</span><span class="special">;</span>
182 <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>
183
184 <span class="comment">// search the queried word on the from index (Spanish)</span>
185
186 <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">left_const_iterator</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">left</span><span class="special">.</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
187
188 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">left</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
189 <span class="special">{</span>
190 <span class="comment">// the second part of the element is the equivalent in English</span>
191
192 <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>
193 <span class="special">&lt;&lt;</span> <span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">second</span> <a class="co" name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c0" href="multiindex_to_bimap_path___bidirectional_map.html#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c1"><img src="../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
194 <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>
195 <span class="special">}</span>
196 <span class="keyword">else</span>
197 <span class="special">{</span>
198 <span class="comment">// word not found in Spanish, try our luck in English</span>
199
200 <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">right_const_iterator</span> <span class="identifier">it2</span> <span class="special">=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">right</span><span class="special">.</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">word</span><span class="special">);</span>
201 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it2</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">right</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span> <span class="special">)</span>
202 <span class="special">{</span>
203 <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>
204 <span class="special">&lt;&lt;</span> <span class="identifier">it2</span><span class="special">-&gt;</span><span class="identifier">second</span> <a class="co" name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c2" href="multiindex_to_bimap_path___bidirectional_map.html#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c3"><img src="../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a>
205 <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>
206 <span class="special">}</span>
207 <span class="keyword">else</span>
208 <span class="special">{</span>
209 <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>
210 <span class="special">}</span>
211 <span class="special">}</span>
212
213 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
214 <span class="special">}</span>
215 </pre>
216 <p>
217 </p>
218 <div class="calloutlist"><table border="0" summary="Callout list">
219 <tr>
220 <td width="5%" valign="top" align="left"><p><a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c1"></a><a href="#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c0"><img src="../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
221 <td valign="top" align="left"><p>
222 <code class="computeroutput"><span class="identifier">it</span></code> is an iterator of
223 the left view, so <code class="computeroutput"><span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">second</span></code>
224 refers to the right element of the relation, the word in english
225 </p></td>
226 </tr>
227 <tr>
228 <td width="5%" valign="top" align="left"><p><a name="boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c3"></a><a href="#boost_bimap.examples.multiindex_to_bimap_path___bidirectional_map.c2"><img src="../../../../../../doc/src/images/callouts/2.png" alt="2" border="0"></a> </p></td>
229 <td valign="top" align="left"><p>
230 <code class="computeroutput"><span class="identifier">it2</span></code> is an iterator of
231 the right view, so <code class="computeroutput"><span class="identifier">it2</span><span class="special">-&gt;</span><span class="identifier">second</span></code>
232 refers to the left element of the relation, the word in spanish
233 </p></td>
234 </tr>
235 </table></div>
236 <p>
237 Or better, using tags...
238 </p>
239 <p>
240 <a href="../../../../example/mi_to_b_path/tagged_bidirectional_map.cpp" target="_top">Go to
241 source code</a>
242 </p>
243 <p>
244 </p>
245 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
246
247 <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>
248
249 <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>
250
251 <span class="comment">// tags</span>
252
253 <span class="keyword">struct</span> <span class="identifier">spanish</span> <span class="special">{};</span>
254 <span class="keyword">struct</span> <span class="identifier">english</span> <span class="special">{};</span>
255
256 <span class="comment">// A dictionary is a bidirectional map from strings to strings</span>
257
258 <span class="keyword">typedef</span> <span class="identifier">bimap</span>
259 <span class="special">&lt;</span>
260 <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="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>
261
262 <span class="special">&gt;</span> <span class="identifier">dictionary</span><span class="special">;</span>
263
264 <span class="keyword">typedef</span> <span class="identifier">dictionary</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">translation</span><span class="special">;</span>
265
266 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
267 <span class="special">{</span>
268 <span class="identifier">dictionary</span> <span class="identifier">d</span><span class="special">;</span>
269
270 <span class="comment">// Fill up our microdictionary. </span>
271 <span class="comment">// first members Spanish, second members English.</span>
272
273 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"hola"</span> <span class="special">,</span><span class="string">"hello"</span> <span class="special">));</span>
274 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"adios"</span><span class="special">,</span><span class="string">"goodbye"</span><span class="special">));</span>
275 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"rosa"</span> <span class="special">,</span><span class="string">"rose"</span> <span class="special">));</span>
276 <span class="identifier">d</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span> <span class="identifier">translation</span><span class="special">(</span><span class="string">"mesa"</span> <span class="special">,</span><span class="string">"table"</span> <span class="special">));</span>
277
278 <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>
279 <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">word</span><span class="special">;</span>
280 <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>
281
282 <span class="comment">// search the queried word on the from index (Spanish) */</span>
283
284 <span class="identifier">dictionary</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">it</span> <span class="special">=</span>
285 <span class="identifier">d</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>
286
287 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">d</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>
288 <span class="special">{</span>
289 <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>
290 <span class="special">&lt;&lt;</span> <span class="identifier">it</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> <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>
291 <span class="special">}</span>
292 <span class="keyword">else</span>
293 <span class="special">{</span>
294 <span class="comment">// word not found in Spanish, try our luck in English</span>
295
296 <span class="identifier">dictionary</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">it2</span> <span class="special">=</span>
297 <span class="identifier">d</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>
298
299 <span class="keyword">if</span><span class="special">(</span> <span class="identifier">it2</span> <span class="special">!=</span> <span class="identifier">d</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>
300 <span class="special">{</span>
301 <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>
302 <span class="special">&lt;&lt;</span> <span class="identifier">it2</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> <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>
303 <span class="special">}</span>
304 <span class="keyword">else</span>
305 <span class="special">{</span>
306 <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>
307 <span class="special">}</span>
308 <span class="special">}</span>
309
310 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
311 <span class="special">}</span>
312 </pre>
313 <p>
314 </p>
315 </div>
316 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
317 <td align="left"></td>
318 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2012 Matias Capeletto<p>
319 Distributed under the Boost Software License, Version 1.0. (See accompanying
320 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>)
321 </p>
322 </div></td>
323 </tr></table>
324 <hr>
325 <div class="spirit-nav">
326 <a accesskey="p" href="mighty_bimap.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.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="multiindex_to_bimap_path___hashed_indices.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
327 </div>
328 </body>
329 </html>