我试图序列化一个简单的std :: unordered_map>使用boost :: serialize。我设法保存地图就好了。当我尝试加载它时会出现此问题。 这是我写的代码:
double E = 250E-4;
std::vector<double> init_vals(2,0.0);
std::unordered_map<double, std::vector<double>> map;
std::ofstream ofs("energy_map");
boost::archive::binary_oarchive oa(ofs);
map.emplace(E, init_vals);
oa << map;
我加载地图的代码是这样的:
std::ifstream ifs("energy_map");
std::unordered_map <double, std::vector<double>> map;
boost::archive::binary_iarchive ia(ifs);
ia >> map;
我获得了一行的boost :: archive :: archive_exception&#34; ia&gt;&gt;地图;&#34 ;.例外是&#34; unregistered_cast&#34;根据boost文档声明的异常:
//基础 - 派生关系未注册 // void_cast_register 我不太确定为什么这个没有用,因为它看起来相当简单。 (我已经编辑了原始文件中的代码,使其更简单,但行与我的代码中的行相同)。
感谢任何帮助。谢谢!
答案 0 :(得分:2)
最有可能的是,您还要/序列化其他一些多态类型。 SSCCE示例显示这适用于GCC:
http://paste.ubuntu.com/12963866/
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/unordered_map.hpp>
#include <boost/serialization/vector.hpp>
#include <fstream>
#include <iostream>
void write_map() {
std::unordered_map<double, std::vector<double> > map;
{
double E = 250E-4;
std::vector<double> init_vals(2, 0.0);
map.emplace(E, init_vals);
}
{
std::ofstream ofs("energy_map");
boost::archive::binary_oarchive oa(ofs);
oa << map;
}
}
void load_map() {
std::unordered_map<double, std::vector<double> > map;
{
std::ifstream ifs("energy_map");
boost::archive::binary_iarchive ia(ifs);
ia >> map;
}
for (auto &p : map) {
std::cout << p.first << " -> { ";
std::copy(p.second.begin(), p.second.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << "}\n";
}
}
int main() {
write_map();
load_map();
}
因此,如果您仍有问题,请检查