繁体   English   中英

对std :: unordered_map进行Boost :: serialization <double, std::vector<double> &gt;

[英]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();
}

因此,如果仍有问题,请检查

  • 对于未定义的行为
  • ABI问题(是否使用与主程序相同的编译器/库版本和标志来增强编译)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM