[serialization] [multimap] change of element's order when deserialize

I have the following code: #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. This program gives as result the following: map1 = key = AB value = 10 key = AB value = 20 key = EF value = 30 key = EF value = 40 map2 = key = AB value = 20 key = AB value = 10 key = EF value = 40 key = EF value = 30 end where you can see that the element's order is changed. When compiling it throw this warning: boost::mpl::print<boost::serialization::BOOST_SERIALIZATION_STATIC_WARNING_LINE<98>
that I don't know what it means. Is this a normal behavior of the serialization library? I am missing something ?
participants (1)
-
Pablo Madoery