![](/img/trans.png)
[英]Seg fault in unordered_map <int, std::vector<double>>
[英]Boost::serialization of an std::unordered_map<double, std::vector<double>>
我正在尝试使用boost :: serialize序列化一个简单的std :: unordered_map>。 我设法保存地图就好了。 当我尝试加载它时,会发生此问题。 这是我的编写代码:
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;
我在“ ia >> map;”行中得到了boost :: archive :: archive_exception。 根据增强文档状态,该异常是“ unregistered_cast”异常:
//基本-派生的关系未注册// // void_cast_register我不太确定为什么这行不通,因为它看起来很简单。 (我已经从原始文件中编辑了代码,以使其更简单,但是这些行与代码中的行相同)。
任何帮助表示赞赏。 谢谢!
您很有可能正在/还/序列化其他一些多态类型。 一个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();
}
因此,如果仍有问题,请检查
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.