![](/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.