1// Boost.Bimap
2//
3// Copyright (c) 2006-2007 Matias Capeletto
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9// VC++ 8.0 warns on usage of certain Standard Library and API functions that
10// can be cause buffer overruns or other possible security issues if misused.
11// See http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx
12// But the wording of the warning is misleading and unsettling, there are no
13// portable alternative functions, and VC++ 8.0's own libraries use the
14// functions in question. So turn off the warnings.
15#define _CRT_SECURE_NO_DEPRECATE
16#define _SCL_SECURE_NO_DEPRECATE
17
18// Boost.Bimap Example
19//-----------------------------------------------------------------------------
20
21#include <boost/config.hpp>
22
23#include <fstream>
24#include <string>
25#include <cassert>
26
27#include <boost/bimap/bimap.hpp>
28
29#include <boost/archive/text_oarchive.hpp>
30#include <boost/archive/text_iarchive.hpp>
31
32using namespace boost::bimaps;
33
34int main()
35{
36 //[ code_bimap_and_boost_serialization
37
38 typedef bimap< std::string, int > bm_type;
39
40 // Create a bimap and serialize it to a file
41 {
42 bm_type bm;
43 bm.insert( x: bm_type::value_type("one",1) );
44 bm.insert( x: bm_type::value_type("two",2) );
45
46 std::ofstream ofs("data");
47 boost::archive::text_oarchive oa(ofs);
48
49 oa << const_cast<const bm_type&>(bm); /*<
50 We must do a const cast because Boost.Serialization archives
51 only save const objects. Read Boost.Serializartion docs for the
52 rationale behind this decision >*/
53
54 /*<< We can only serialize iterators if the bimap was serialized first.
55 Note that the const cast is not requiered here because we create
56 our iterators as const. >>*/
57 const bm_type::left_iterator left_iter = bm.left.find(k: "two");
58 oa << left_iter;
59
60 const bm_type::right_iterator right_iter = bm.right.find(k: 1);
61 oa << right_iter;
62 }
63
64 // Load the bimap back
65 {
66 bm_type bm;
67
68 std::ifstream ifs("data", std::ios::binary);
69 boost::archive::text_iarchive ia(ifs);
70
71 ia >> bm;
72
73 assert( bm.size() == 2 );
74
75 bm_type::left_iterator left_iter;
76 ia >> left_iter;
77
78 assert( left_iter->first == "two" );
79
80 bm_type::right_iterator right_iter;
81 ia >> right_iter;
82
83 assert( right_iter->first == 1 );
84 }
85 //]
86
87 return 0;
88}
89
90

source code of boost/libs/bimap/example/bimap_and_boost/serialization.cpp