bimap_reference.html 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. <html>
  2. <head>
  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.79.1">
  7. <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;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">
  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="../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>
  24. </div>
  25. <div class="section">
  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>
  29. <div class="toc"><dl class="toc">
  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>
  41. <dd><dl>
  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
  44. types</a></span></dt>
  45. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.nested_types">Nested
  46. types</a></span></dt>
  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>
  54. </dl></dd>
  55. </dl></div>
  56. <div class="section">
  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
  59. concepts</a>
  60. </h4></div></div></div>
  61. <p>
  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.
  66. </p>
  67. <p>
  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.
  72. </p>
  73. <p>
  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:
  81. </p>
  82. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  83. <li class="listitem">
  84. copying
  85. </li>
  86. <li class="listitem">
  87. insertion of an element
  88. </li>
  89. <li class="listitem">
  90. hinted insertion, where a pre-existing element is suggested in order
  91. to improve the efficiency of the operation
  92. </li>
  93. <li class="listitem">
  94. deletion of an element
  95. </li>
  96. <li class="listitem">
  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
  99. </li>
  100. <li class="listitem">
  101. modification of an element, and its subsequent rearrangement/banning
  102. by the various views
  103. </li>
  104. </ul></div>
  105. <p>
  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
  111. fashion.
  112. </p>
  113. </div>
  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
  117. signature</a>
  118. </h4></div></div></div>
  119. <p>
  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.
  124. </p>
  125. <p>
  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:
  129. </p>
  130. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-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>:
  133. copying
  134. </li>
  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>:
  137. insertion
  138. </li>
  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>:
  141. hinted insertion
  142. </li>
  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>:
  145. deletion
  146. </li>
  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>:
  149. replacement
  150. </li>
  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>:
  153. modifying
  154. </li>
  155. </ul></div>
  156. <p>
  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:
  168. </p>
  169. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-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>
  172. </li>
  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>
  175. </li>
  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>
  178. </li>
  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>
  181. </li>
  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>
  184. </li>
  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>
  187. </li>
  188. </ul></div>
  189. </div>
  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>
  195. <p>
  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.
  205. </p>
  206. <div class="informaltable"><table class="table">
  207. <colgroup>
  208. <col>
  209. <col>
  210. <col>
  211. </colgroup>
  212. <thead><tr>
  213. <th>
  214. <p>
  215. Side collection type
  216. </p>
  217. </th>
  218. <th>
  219. <p>
  220. Collection type of relation
  221. </p>
  222. </th>
  223. <th>
  224. <p>
  225. Include
  226. </p>
  227. </th>
  228. </tr></thead>
  229. <tbody>
  230. <tr>
  231. <td>
  232. <p>
  233. <code class="computeroutput"><span class="identifier">set_of</span></code>
  234. </p>
  235. </td>
  236. <td>
  237. <p>
  238. <code class="computeroutput"><span class="identifier">set_of_relation</span></code>
  239. </p>
  240. </td>
  241. <td>
  242. <p>
  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>
  244. </p>
  245. </td>
  246. </tr>
  247. <tr>
  248. <td>
  249. <p>
  250. <code class="computeroutput"><span class="identifier">multiset_of</span></code>
  251. </p>
  252. </td>
  253. <td>
  254. <p>
  255. <code class="computeroutput"><span class="identifier">multiset_of_relation</span></code>
  256. </p>
  257. </td>
  258. <td>
  259. <p>
  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>
  261. </p>
  262. </td>
  263. </tr>
  264. <tr>
  265. <td>
  266. <p>
  267. <code class="computeroutput"><span class="identifier">unordered_set_of</span></code>
  268. </p>
  269. </td>
  270. <td>
  271. <p>
  272. <code class="computeroutput"><span class="identifier">unordered_set_of_relation</span></code>
  273. </p>
  274. </td>
  275. <td>
  276. <p>
  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>
  278. </p>
  279. </td>
  280. </tr>
  281. <tr>
  282. <td>
  283. <p>
  284. <code class="computeroutput"><span class="identifier">unordered_multiset_of</span></code>
  285. </p>
  286. </td>
  287. <td>
  288. <p>
  289. <code class="computeroutput"><span class="identifier">unordered_multiset_of_relation</span></code>
  290. </p>
  291. </td>
  292. <td>
  293. <p>
  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>
  295. </p>
  296. </td>
  297. </tr>
  298. <tr>
  299. <td>
  300. <p>
  301. <code class="computeroutput"><span class="identifier">list_of</span></code>
  302. </p>
  303. </td>
  304. <td>
  305. <p>
  306. <code class="computeroutput"><span class="identifier">list_of_relation</span></code>
  307. </p>
  308. </td>
  309. <td>
  310. <p>
  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>
  312. </p>
  313. </td>
  314. </tr>
  315. <tr>
  316. <td>
  317. <p>
  318. <code class="computeroutput"><span class="identifier">vector_of</span></code>
  319. </p>
  320. </td>
  321. <td>
  322. <p>
  323. <code class="computeroutput"><span class="identifier">vector_of_relation</span></code>
  324. </p>
  325. </td>
  326. <td>
  327. <p>
  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>
  329. </p>
  330. </td>
  331. </tr>
  332. <tr>
  333. <td>
  334. <p>
  335. <code class="computeroutput"><span class="identifier">unconstrained_set_of</span></code>
  336. </p>
  337. </td>
  338. <td>
  339. <p>
  340. <code class="computeroutput"><span class="identifier">unconstrained_set_of_relation</span></code>
  341. </p>
  342. </td>
  343. <td>
  344. <p>
  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>
  346. </p>
  347. </td>
  348. </tr>
  349. <tr>
  350. <td>
  351. </td>
  352. <td>
  353. <p>
  354. <code class="computeroutput"><span class="identifier">left_based</span></code>
  355. </p>
  356. </td>
  357. <td>
  358. <p>
  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>
  360. </p>
  361. </td>
  362. </tr>
  363. <tr>
  364. <td>
  365. </td>
  366. <td>
  367. <p>
  368. <code class="computeroutput"><span class="identifier">right_based</span></code>
  369. </p>
  370. </td>
  371. <td>
  372. <p>
  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>
  374. </p>
  375. </td>
  376. </tr>
  377. </tbody>
  378. </table></div>
  379. </div>
  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>
  384. <p>
  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.
  388. </p>
  389. </div>
  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>
  397. <span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
  398. <span class="keyword">struct</span> <span class="identifier">tagged</span><span class="special">;</span>
  399. <span class="comment">// bimap template class</span>
  400. <span class="keyword">template</span>
  401. <span class="special">&lt;</span>
  402. <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>
  403. <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>
  404. <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>
  405. <span class="special">&gt;</span>
  406. <span class="keyword">class</span> <span class="identifier">bimap</span> <span class="emphasis"><em>- implementation defined { : public SetView } -</em></span>
  407. <span class="special">{</span>
  408. <span class="keyword">public</span><span class="special">:</span>
  409. <span class="comment">// Metadata</span>
  410. <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">left_tag</span><span class="special">;</span>
  411. <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">left_map</span><span class="special">;</span>
  412. <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">right_tag</span><span class="special">;</span>
  413. <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">right_map</span><span class="special">;</span>
  414. <span class="comment">// Shortcuts</span>
  415. <span class="comment">// typedef -side-_map::-type- -side-_-type-;</span>
  416. <span class="keyword">typedef</span> <span class="emphasis"><em>-unspecified-</em></span> <span class="identifier">info_type</span><span class="special">;</span>
  417. <span class="comment">// Map views</span>
  418. <span class="identifier">left_map</span> <span class="identifier">left</span><span class="special">;</span>
  419. <span class="identifier">right_map</span> <span class="identifier">right</span><span class="special">;</span>
  420. <span class="comment">// Constructors</span>
  421. <span class="identifier">bimap</span><span class="special">();</span>
  422. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">InputIterator</span> <span class="special">&gt;</span>
  423. <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>
  424. <span class="identifier">bimap</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">bimap</span> <span class="special">&amp;);</span>
  425. <span class="identifier">bimap</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">bimap</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
  426. <span class="comment">// Projection of iterators</span>
  427. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  428. <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>
  429. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  430. <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>
  431. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  432. <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>
  433. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  434. <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>
  435. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  436. <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>
  437. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  438. <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>
  439. <span class="comment">// Support for tags</span>
  440. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  441. <span class="keyword">struct</span> <span class="identifier">map_by</span><span class="special">;</span>
  442. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  443. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">by</span><span class="special">();</span>
  444. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  445. <span class="keyword">const</span> <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&amp;</span> <span class="identifier">by</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  446. <span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
  447. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</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>
  448. <span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
  449. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</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>
  450. <span class="special">};</span>
  451. <span class="special">}</span> <span class="comment">// namespace bimap</span>
  452. <span class="special">}</span> <span class="comment">// namespace boost</span>
  453. </pre>
  454. </div>
  455. <div class="section">
  456. <div class="titlepage"><div><div><h4 class="title">
  457. <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
  458. template bimap</a>
  459. </h4></div></div></div>
  460. <div class="toc"><dl class="toc">
  461. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.complexity">Complexity</a></span></dt>
  462. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.instantiation_types">Instantiation
  463. types</a></span></dt>
  464. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.nested_types">Nested
  465. types</a></span></dt>
  466. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.constructors__copy_and_assignment">Constructors,
  467. copy and assignment</a></span></dt>
  468. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.projection_operations">Projection
  469. operations</a></span></dt>
  470. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.support_for_user_defined_names">Support
  471. for user defined names</a></span></dt>
  472. <dt><span class="section"><a href="bimap_reference.html#boost_bimap.reference.bimap_reference.class_template_bimap.serialization">Serialization</a></span></dt>
  473. </dl></div>
  474. <p>
  475. This is the main component of Boost.Bimap.
  476. </p>
  477. <div class="section">
  478. <div class="titlepage"><div><div><h5 class="title">
  479. <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>
  480. </h5></div></div></div>
  481. <p>
  482. In the descriptions of the operations of <code class="computeroutput"><span class="identifier">bimap</span></code>,
  483. we adopt the scheme outlined in the complexity signature section.
  484. </p>
  485. </div>
  486. <div class="section">
  487. <div class="titlepage"><div><div><h5 class="title">
  488. <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
  489. types</a>
  490. </h5></div></div></div>
  491. <p>
  492. <code class="computeroutput"><span class="identifier">bimap</span></code> is instantiated
  493. with the following types:
  494. </p>
  495. <div class="orderedlist"><ol class="orderedlist" type="1">
  496. <li class="listitem">
  497. LeftCollectionType and RightCollectionType are collection type specifications
  498. optionally tagged, or any type optionally tagged, in which case that
  499. side acts as a set.
  500. </li>
  501. <li class="listitem">
  502. AdditionalParameter_{1/2} can be any ordered subset of:
  503. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  504. <li class="listitem">
  505. CollectionTypeOfRelation specification
  506. </li>
  507. <li class="listitem">
  508. Allocator
  509. </li>
  510. </ul></div>
  511. </li>
  512. </ol></div>
  513. </div>
  514. <div class="section">
  515. <div class="titlepage"><div><div><h5 class="title">
  516. <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
  517. types</a>
  518. </h5></div></div></div>
  519. <pre class="programlisting"><span class="identifier">left_tag</span><span class="special">,</span> <span class="identifier">right_tag</span>
  520. </pre>
  521. <div class="blockquote"><blockquote class="blockquote"><p>
  522. Tags for each side of the bimap. If the user has not specified any
  523. tag the tags default to <code class="computeroutput"><span class="identifier">member_at</span><span class="special">::</span><span class="identifier">left</span></code>
  524. and <code class="computeroutput"><span class="identifier">member_at</span><span class="special">::</span><span class="identifier">right</span></code>.
  525. </p></blockquote></div>
  526. <pre class="programlisting"><span class="identifier">left_key_type</span><span class="special">,</span> <span class="identifier">right_key_type</span>
  527. </pre>
  528. <div class="blockquote"><blockquote class="blockquote"><p>
  529. Key type of each side. In a <code class="computeroutput"><span class="identifier">bimap</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span><span class="identifier">B</span><span class="special">&gt;</span> </code> <code class="computeroutput"><span class="identifier">left_key_type</span></code>
  530. 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>.
  531. 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">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">key_type</span></code>.
  532. </p></blockquote></div>
  533. <pre class="programlisting"><span class="identifier">left_data_type</span><span class="special">,</span> <span class="identifier">right_data_type</span>
  534. </pre>
  535. <div class="blockquote"><blockquote class="blockquote"><p>
  536. Data type of each side. In a bimap&lt;A,B&gt; left_key_type is B and
  537. 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">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">data_type</span></code>.
  538. </p></blockquote></div>
  539. <pre class="programlisting"><span class="identifier">left_value_type</span><span class="special">,</span> <span class="identifier">right_value_type</span>
  540. </pre>
  541. <div class="blockquote"><blockquote class="blockquote"><p>
  542. Value type used for the views. If there are tags, it is better to use:
  543. <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">value_type</span></code>.
  544. </p></blockquote></div>
  545. <pre class="programlisting"><span class="identifier">left_iterator</span><span class="special">,</span> <span class="identifier">right_iterator</span>
  546. <span class="identifier">left_const_iterator</span><span class="special">,</span> <span class="identifier">right_const_iterator</span>
  547. </pre>
  548. <div class="blockquote"><blockquote class="blockquote"><p>
  549. 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">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</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">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">const_iterator</span></code>
  550. </p></blockquote></div>
  551. <pre class="programlisting"><span class="identifier">left_map</span><span class="special">,</span> <span class="identifier">right_map</span>
  552. </pre>
  553. <div class="blockquote"><blockquote class="blockquote"><p>
  554. Map view type of each side. If there are tags, it is better to use:
  555. <code class="computeroutput"><span class="identifier">Bimap</span><span class="special">::</span><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
  556. </p></blockquote></div>
  557. </div>
  558. <div class="section">
  559. <div class="titlepage"><div><div><h5 class="title">
  560. <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,
  561. copy and assignment</a>
  562. </h5></div></div></div>
  563. <pre class="programlisting"><span class="identifier">bimap</span><span class="special">();</span>
  564. </pre>
  565. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  566. <li class="listitem">
  567. <span class="bold"><strong>Effects:</strong></span> Constructs an empty <code class="computeroutput"><span class="identifier">bimap</span></code>.
  568. </li>
  569. <li class="listitem">
  570. <span class="bold"><strong>Complexity:</strong></span> Constant.
  571. </li>
  572. </ul></div>
  573. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">InputIterator</span><span class="special">&gt;</span>
  574. <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>
  575. </pre>
  576. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  577. <li class="listitem">
  578. <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">InputIterator</span></code>
  579. is a model of Input Iterator over elements of type <code class="computeroutput"><span class="identifier">relation</span></code> or a type convertible
  580. to <code class="computeroutput"><span class="identifier">relation</span></code>. last
  581. is reachable from <code class="computeroutput"><span class="identifier">first</span></code>.
  582. </li>
  583. <li class="listitem">
  584. <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
  585. 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
  586. may not succeed depending on acceptance by the collection types of
  587. the <code class="computeroutput"><span class="identifier">bimap</span></code>.
  588. </li>
  589. <li class="listitem">
  590. <a class="link" href="bimap_reference.html#complexity_signature_explanation"><span class="bold"><strong>Complexity:</strong></span></a>
  591. 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>.
  592. </li>
  593. </ul></div>
  594. <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">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
  595. </pre>
  596. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  597. <li class="listitem">
  598. <span class="bold"><strong>Effects:</strong></span> Constructs a copy of x,
  599. copying its elements as well as its internal objects (key extractors,
  600. comparison objects, allocator.)
  601. </li>
  602. <li class="listitem">
  603. <span class="bold"><strong>Postconditions:</strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span>
  604. <span class="identifier">x</span></code>. The order of the views
  605. of the <code class="computeroutput"><span class="identifier">bimap</span></code> is preserved
  606. as well.
  607. </li>
  608. <li class="listitem">
  609. <span class="bold"><strong>Complexity:</strong></span> O(x.size()*log(x.size())
  610. + C(x.size()))
  611. </li>
  612. </ul></div>
  613. <pre class="programlisting"><span class="special">~</span><span class="identifier">bimap</span><span class="special">()</span>
  614. </pre>
  615. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  616. <li class="listitem">
  617. <span class="bold"><strong>Effects:</strong></span> Destroys the <code class="computeroutput"><span class="identifier">bimap</span></code> and all the elements contained.
  618. The order in which the elements are destroyed is not specified.
  619. </li>
  620. <li class="listitem">
  621. <span class="bold"><strong>Complexity:</strong></span> O(n).
  622. </li>
  623. </ul></div>
  624. <pre class="programlisting"><span class="identifier">bimap</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">bimap</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
  625. </pre>
  626. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  627. <li class="listitem">
  628. <span class="bold"><strong>Effects:</strong></span> Replaces the elements and
  629. internal objects of the <code class="computeroutput"><span class="identifier">bimap</span></code>
  630. with copies from x.
  631. </li>
  632. <li class="listitem">
  633. <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
  634. <code class="computeroutput"><span class="identifier">bimap</span></code> is preserved
  635. as well.
  636. </li>
  637. <li class="listitem">
  638. <span class="bold"><strong>Returns: </strong></span> <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
  639. </li>
  640. <li class="listitem">
  641. <span class="bold"><strong>Complexity:</strong></span> O(n + x.size()*log(x.size())
  642. + C(x.size())).
  643. </li>
  644. <li class="listitem">
  645. <span class="bold"><strong>Exception safety:</strong></span> Strong, provided
  646. the copy and assignment operations of the types of <code class="computeroutput"><span class="identifier">ctor_args_list</span></code> do not throw.
  647. </li>
  648. </ul></div>
  649. </div>
  650. <div class="section">
  651. <div class="titlepage"><div><div><h5 class="title">
  652. <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
  653. operations</a>
  654. </h5></div></div></div>
  655. <p>
  656. Given a <code class="computeroutput"><span class="identifier">bimap</span></code> with views
  657. v1 and v2, we say than an v1-iterator it1 and an v2-iterator it2 are
  658. equivalent if:
  659. </p>
  660. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  661. <li class="listitem">
  662. <code class="computeroutput"><span class="identifier">it1</span> <span class="special">==</span>
  663. <span class="identifier">i1</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>
  664. AND <code class="computeroutput"><span class="identifier">it2</span> <span class="special">==</span>
  665. <span class="identifier">i2</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code>,
  666. </li>
  667. <li class="listitem">
  668. 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.
  669. </li>
  670. </ul></div>
  671. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  672. <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>
  673. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  674. <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>
  675. </pre>
  676. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  677. <li class="listitem">
  678. <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
  679. is a bimap view iterator. it is a valid iterator of some view of
  680. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  681. (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
  682. </li>
  683. <li class="listitem">
  684. <span class="bold"><strong>Effects:</strong></span> Returns a left map view
  685. iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
  686. </li>
  687. <li class="listitem">
  688. <span class="bold"><strong>Complexity:</strong></span> Constant.
  689. </li>
  690. <li class="listitem">
  691. <span class="bold"><strong>Exception safety:</strong></span> nothrow.
  692. </li>
  693. </ul></div>
  694. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  695. <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>
  696. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  697. <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>
  698. </pre>
  699. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  700. <li class="listitem">
  701. <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
  702. is a bimap view iterator. it is a valid iterator of some view of
  703. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  704. (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
  705. </li>
  706. <li class="listitem">
  707. <span class="bold"><strong>Effects:</strong></span> Returns a right map view
  708. iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
  709. </li>
  710. <li class="listitem">
  711. <span class="bold"><strong>Complexity:</strong></span> Constant.
  712. </li>
  713. <li class="listitem">
  714. <span class="bold"><strong>Exception safety:</strong></span> nothrow.
  715. </li>
  716. </ul></div>
  717. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  718. <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>
  719. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">IteratorType</span> <span class="special">&gt;</span>
  720. <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>
  721. </pre>
  722. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  723. <li class="listitem">
  724. <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">IteratorType</span></code>
  725. is a bimap view iterator. it is a valid iterator of some view of
  726. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  727. (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
  728. </li>
  729. <li class="listitem">
  730. <span class="bold"><strong>Effects:</strong></span> Returns a collection of
  731. relations view iterator equivalent to <code class="computeroutput"><span class="identifier">it</span></code>.
  732. </li>
  733. <li class="listitem">
  734. <span class="bold"><strong>Complexity:</strong></span> Constant.
  735. </li>
  736. <li class="listitem">
  737. <span class="bold"><strong>Exception safety:</strong></span> nothrow.
  738. </li>
  739. </ul></div>
  740. </div>
  741. <div class="section">
  742. <div class="titlepage"><div><div><h5 class="title">
  743. <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
  744. for user defined names</a>
  745. </h5></div></div></div>
  746. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  747. <span class="keyword">struct</span> <span class="identifier">map_by</span><span class="special">;</span>
  748. </pre>
  749. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  750. <li class="listitem">
  751. <code class="computeroutput"><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span></code> yields the type of the map
  752. view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>.
  753. <code class="computeroutput"><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span></code><span class="emphasis"><em>-type
  754. name-</em></span> is the same as <code class="computeroutput"><span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span></code><span class="emphasis"><em>-type name-</em></span>.
  755. </li>
  756. <li class="listitem">
  757. <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
  758. is a valid user defined name of the bimap.
  759. </li>
  760. </ul></div>
  761. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  762. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">by</span><span class="special">();</span>
  763. <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">class</span> <span class="identifier">Tag</span> <span class="special">&gt;</span>
  764. <span class="keyword">const</span> <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&amp;</span> <span class="identifier">by</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  765. </pre>
  766. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  767. <li class="listitem">
  768. <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
  769. is a valid user defined name of the bimap.
  770. </li>
  771. <li class="listitem">
  772. <span class="bold"><strong>Effects:</strong></span> Returns a reference to
  773. the map view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>
  774. held by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
  775. </li>
  776. <li class="listitem">
  777. <span class="bold"><strong>Complexity:</strong></span> Constant.
  778. </li>
  779. <li class="listitem">
  780. <span class="bold"><strong>Exception safety:</strong></span> nothrow.
  781. </li>
  782. </ul></div>
  783. <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
  784. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</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>
  785. <span class="keyword">template</span><span class="special">&lt;</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">&gt;</span>
  786. <span class="identifier">map_by</span><span class="special">&lt;</span><span class="identifier">Tag</span><span class="special">&gt;::</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>
  787. </pre>
  788. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  789. <li class="listitem">
  790. <span class="bold"><strong>Requires: </strong></span> <code class="computeroutput"><span class="identifier">Tag</span></code>
  791. is a valid user defined name of the bimap. <code class="computeroutput"><span class="identifier">IteratorType</span></code>
  792. is a bimap view iterator. it is a valid iterator of some view of
  793. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
  794. (i.e. does not refer to some other <code class="computeroutput"><span class="identifier">bimap</span></code>.)
  795. </li>
  796. <li class="listitem">
  797. <span class="bold"><strong>Effects:</strong></span> Returns a reference to
  798. the map view tagged with <code class="computeroutput"><span class="identifier">Tag</span></code>
  799. held by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>.
  800. </li>
  801. <li class="listitem">
  802. <span class="bold"><strong>Complexity:</strong></span> Constant.
  803. </li>
  804. <li class="listitem">
  805. <span class="bold"><strong>Exception safety:</strong></span> nothrow.
  806. </li>
  807. </ul></div>
  808. </div>
  809. <div class="section">
  810. <div class="titlepage"><div><div><h5 class="title">
  811. <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>
  812. </h5></div></div></div>
  813. <p>
  814. A <code class="computeroutput"><span class="identifier">bimap</span></code> can be archived
  815. 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
  816. not expose a public serialisation interface, as this is provided by Boost.Serialization
  817. itself. Both regular and XML archives are supported.
  818. </p>
  819. <p>
  820. Each of the set specifications comprising a given <code class="computeroutput"><span class="identifier">bimap</span></code>
  821. contributes its own preconditions as well as guarantees on the retrieved
  822. containers. In describing these, the following concepts are used. A type
  823. <code class="computeroutput"><span class="identifier">T</span></code> is <span class="emphasis"><em>serializable</em></span>
  824. (resp. XML-serializable) if any object of type <code class="computeroutput"><span class="identifier">T</span></code>
  825. can be saved to an output archive (XML archive) and later retrieved from
  826. 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>
  827. is loaded from the serialization information saved from another object
  828. x, we say that x' is a <span class="emphasis"><em>restored copy</em></span> of x. Given
  829. a <a href="https://www.boost.org/sgi/stl/BinaryPredicate.html" target="_top">Binary
  830. Predicate</a> <code class="computeroutput"><span class="identifier">Pred</span></code>
  831. 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>
  832. 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>
  833. is <span class="emphasis"><em>serialization-compatible</em></span> with <code class="computeroutput"><span class="identifier">p</span></code>
  834. if
  835. </p>
  836. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
  837. <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>
  838. </li></ul></div>
  839. <p>
  840. 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>
  841. 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>,
  842. respectively.
  843. </p>
  844. <div class="blurb">
  845. <div class="titlepage"><div><div><p class="title"><b></b></p></div></div></div>
  846. <p>
  847. <span class="bold"><strong>Operation:</strong></span> saving of a <code class="computeroutput"><span class="identifier">bimap</span> <span class="identifier">b</span></code>
  848. to an output archive (XML archive) ar.
  849. </p>
  850. </div>
  851. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  852. <li class="listitem">
  853. <span class="bold"><strong>Requires:</strong></span> Value is serializable
  854. (XML-serializable). Additionally, each of the views of b can impose
  855. other requirements.
  856. </li>
  857. <li class="listitem">
  858. <span class="bold"><strong>Exception safety:</strong></span> Strong with respect
  859. to <code class="computeroutput"><span class="identifier">b</span></code>. If an exception
  860. is thrown, ar may be left in an inconsistent state.
  861. </li>
  862. </ul></div>
  863. <div class="blurb">
  864. <div class="titlepage"><div><div><p class="title"><b></b></p></div></div></div>
  865. <p>
  866. <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
  867. archive) ar.
  868. </p>
  869. </div>
  870. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  871. <li class="listitem">
  872. <span class="bold"><strong>Requires:</strong></span> Value is serializable
  873. (XML-serializable). Additionally, each of the views of <code class="computeroutput"><span class="identifier">b</span></code>' can impose other requirements.
  874. </li>
  875. <li class="listitem">
  876. <span class="bold"><strong>Exception safety:</strong></span> Basic. If an exception
  877. is thrown, ar may be left in an inconsistent state.
  878. </li>
  879. </ul></div>
  880. </div>
  881. </div>
  882. </div>
  883. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  884. <td align="left"></td>
  885. <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2012 Matias Capeletto<p>
  886. Distributed under the Boost Software License, Version 1.0. (See accompanying
  887. 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>)
  888. </p>
  889. </div></td>
  890. </tr></table>
  891. <hr>
  892. <div class="spirit-nav">
  893. <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>
  894. </div>
  895. </body>
  896. </html>