如何使用 boost std::vector of boost::unordered_map 进行序列化/反序列化

Posted

技术标签:

【中文标题】如何使用 boost std::vector of boost::unordered_map 进行序列化/反序列化【英文标题】:How to serialize/deserialize with boost std::vector of boost::unordered_map 【发布时间】:2014-05-29 00:57:24 【问题描述】:

如何使用 boost::unordered_map 的 boost std::vector 进行序列化/反序列化

vector<boost::unordered_map<uint64_t, Person* > *> town;

代表城镇。所有指针都是用new创建的堆上的行。是否可以在不重构代码以使用 shared_ptr 的情况下轻松反序列化? 人也有功能

template<class Archive>
void serialize(Archive & archive, const unsigned int version)
...

【问题讨论】:

看起来这是一个向您提出的问题,您可能需要重新提出问题,包括您如何尝试解决它,然后有人可以帮助您解决您的尝试解决方案。 Boost.Serialization automatically handles pointers。只要Person 是可序列化的,那么Pointer* 就完全没有问题。你遇到了什么问题? @ildjarn 问题是当我想反序列化时,我需要所有人都在堆上与所有 unordered_maps 相同。 【参考方案1】:

Boost 序列化尚不支持 unordered_*。

要么添加支持,要么使用(已弃用的)GCC hash_* 容器

如何添加支持的示例在我的这个答案中:C++ Boost.Serialization error for hash_map with custom objects as key

【讨论】:

【参考方案2】:

Boost 从 1.5.6 版本开始已经支持 unordered_setunordered_map。你可以只包含头文件。

#include <boost/serialization/unordered_map.hpp>
#include <boost/serialization/unordered_set.hpp>

【讨论】:

以上是关于如何使用 boost std::vector of boost::unordered_map 进行序列化/反序列化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 std::vector 初始化 boost::random::discrete_distribution?

使用 boost::is_any_of 拆分会混淆分隔符 ",," 和 ","

使用 boost::python vector_indexing_suite 包装 std::vector

boost::container::vector 和 std::vector 有啥区别

在 boost::asio::buffer 中使用类似 std::vector<std::complex<double>> 的参数

boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]