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序列化完全分离。