gpt4 book ai didi

c++ - 如何 boost::序列化 vector 的 HashMap ?

转载 作者:行者123 更新时间:2023-11-28 05:16:13 26 4
gpt4 key购买 nike

我有一个核心数据结构,我正在将值加载到其中:它是 vector 的 HashMap 。但是, vector 包含一个结构。此外,该结构使用模板类型。

我需要序列化这个数据结构并定期保存到磁盘。然后,稍后——在不同的程序中——我需要加载序列化的数据结构。

这是结构的简化版本。我对它们进行了最低限度的定义,但除了这个基本版本之外,还有其他数据项(成员)。

#include<vector>
#include<string>
#include<map>
#include<fstream>
#include<stdlib.h>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_oarchive.hpp>
using namespace std;

template<typename T>
struct DataUnit{
size_t time;
string transaction_string;
T transaction;
}

template<typename T>
struct DataStructure{
map<string transaction_hash, vector<DataUnit<T>> > hashmap;
int max_transactions;

// I have a method to add stuff, but omitted for readability
}

我从第一个结构 DataUnit 开始,修改如下:

    template<typename T>
struct DataUnit{
size_t time;
string transaction_string;
T transaction;
template<class Archive>
void serialize(Archive & ar, const unsigned int version){
ar & time;
ar & transaction;
ar & transaction_string;
}
};

最后,我需要序列化数据结构。但是,当我使用以下代码运行它时:

int main(){
DataUnit<int> hi;
hi.time = time(NULL);
hi.transaction = 1;
hi.transaction_string = "world";
return 0;
}

世界因 boost 的错误而爆炸。据我所知,我遵循了教程示例 exactly .我如何 boost 序列化这些对象?

一些错误(但有这么多我不敢相信这不是基本的错误......):

In function `boost::archive::text_oarchive::text_oarchive(std::ostream&, unsigned int)

undefined reference to `boost::archive::text_oarchive_impl::text_oarchive_impl(std::ostream&, unsigned int)'

last error:

undefined reference to `boost::archive::archive_exception::~archive_exception()'

它从那里继续......但我没有看到我缺少任何包含......(boost 是通过 Cygwin 安装的)......

(以管理员身份运行代码...我正在输出的文本文件存在,具有读写权限...正在成功创建 ofs 对象)...


目前,完全没有想法......(尝试链接 lboost_serialization,重新安装 boost)不知道我是否从代码中遗漏了一些东西 ^^^

最佳答案

问题是你依赖构建命令的顺序。您需要在使用它们的模块之后列出依赖项。你也不编译 .h 文件。它们应该包含在使用它们的 .cpp 文件中。试试这个命令:

g++ -std=c++11 main.cpp hashmap_transaction.cpp -o run.exe  -lboost_serialization

关于c++ - 如何 boost::序列化 vector 的 HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com