#include <utility>
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
#include <map>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/map.hpp>
using namespace std;
void print(multimap<pair<string, string>, int> &m)
{
multimap<pair<string, string>, int>::iterator it1 = m.begin();
multimap<pair<string, string>, int>::iterator it2 = m.end();
for(; it1!=it2; ++it1)
{
cout<<"key = "<<(it1->first).first<<(it1->first).second<<"\t\t";
cout<<"value = "<<(it1->second)<<endl;
}
cout<<endl;
}
int main()
{
multimap<pair<string, string>, int> m1;
pair<string, string> par1("A", "B");
pair<string, string> par2("A", "B");
pair<string, string> par3("E", "F");
pair<string, string> par4("E", "F");
m1.insert(pair<pair<string, string>, int>(par1,10));
m1.insert(pair<pair<string, string>, int>(par2,20));
m1.insert(pair<pair<string, string>, int>(par3,30));
m1.insert(pair<pair<string, string>, int>(par4,40));
ofstream ofs("filename");
boost::archive::text_oarchive serial1(ofs);
serial1 << m1;
ofs.close();
ifstream ifs("filename");
boost::archive::text_iarchive serial2(ifs);
multimap<pair<string, string>, int> m2;
serial2 >> m2;
cout<<"map1 = "<<endl;
print(m1);
cout<<endl;
cout<<"map2 = "<<endl;
print(m2);
cout << "end" << endl;
return 0;
}
What I am trying to do is serialize a multimap and then deserialize it.
The problem i that the order of the elements is not conserved.
where you can see that the element's order is changed.
boost::mpl::print<boost::serialization::BOOST_SERIALIZATION_STATIC_WARNING_LINE<98> >
that I don't know what it means.