C++ 使用boost序列化库序列化stdext::hash_映射

C++ 使用boost序列化库序列化stdext::hash_映射,c++,hashmap,boost-serialization,C++,Hashmap,Boost Serialization,我想将散列映射序列化为文件,并在稍后对其进行反序列化 #include <boost/serialization/hash_map.hpp> #include <boost/filesystem/fstream.hpp> #include <hash_map> class A: virtual public B { public: friend class boost::serialization::access; stdext::ha

我想将散列映射序列化为文件,并在稍后对其进行反序列化

#include <boost/serialization/hash_map.hpp>
#include <boost/filesystem/fstream.hpp>
#include <hash_map>

class A: virtual public B {
 public:
     friend class boost::serialization::access;
     stdext::hash_map<std::string, myClass> myClassHashTable; 
     template <class Archive>
     void serialize(Archive &ar, const unsigned int version)
     {
        ar & myClassHashTable;
     }
};

void A::serializedToDisk()
{
      boost::filesystem::path finalPath(SOME_CONSTANT);
      // code to create  boost::filesystem::ifstream ofs object
      boost::archive::text_oarchive oa(ofs);
      oa << myClassHashTable;
}
void A::restoreFromDisk()
{
     boost::filesystem::path finalPath(SOME_CONSTANT);
    // code to create  boost::filesystem::ifstream ifs object
      boost::archive::text_iarchive ia(ifs);
      ia >> myClassHashTable;
}
#包括
#包括
#包括
A类:虚拟公共B{
公众:
好友类boost::serialization::access;
stdext::hash_映射myClassHashTable;
模板
无效序列化(存档和ar,常量未签名整数版本)
{
ar&myClassHashTable;
}
};
void A::serializedToDisk()
{
boost::filesystem::path finalPath(一些常量);
//创建boost::filesystem::ifstream of s对象的代码
boost::archive::text\u oarchive oa(ofs);
oa>myClassHashTable;
}
但我得到一个错误,因为-

错误C2039:“序列化”:不是“stdext::hash\u map”的成员


我在网上搜索了这个错误,但没有得到多少帮助。另外,我检查了我的boost安装
序列化/hash_映射。hpp
中确实有一个
serialize()
函数。同样的代码用于
std::deque
的序列化。谁能告诉我应该如何更改它以使其可编译吗?

首先,在代码顶部插入
\define BOOST\u HAS\u HASH

这会将编译错误更改为:

“错误C2039:‘调整大小’:不是'stdext::hash_map'的成员”:D

接下来,如果您对恢复函数进行注释,您将看到代码工作正常并输出!<好>

但问题在于编译器之间的不兼容。 不幸的是,
散列映射的实现在“msv”和“GCC”中是不同的,
调整大小
就是这种差异的一个例子


下一步要解决这个新问题,, 只需
#包括boost/serialization/map.hpp

和注释
s.resize(bucket\u count)hash\u collections\u load\u imp.hpp
(出错的地方)

中的code>不是您想要的,但是Google Sparsehash库映射提供了一些内置的序列化支持,尽管与Boost序列化完全分离。