簡體   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