【问题标题】:What map with serialization support is there in C++? [closed]C++ 中有哪些支持序列化的映射? [关闭]
【发布时间】:2014-12-29 10:21:44
【问题描述】:

我需要将我的数据保存在关联表中。比如:

 typedef std::map< point, std::list<h_stat> > hm;

但是 STL 容器没有现成的序列化方法。这是一个非常悲伤的消息。 我认为,将 boost 库链接到我的小项目不是一个好主意。

我在 Windows 上编程。也许,windows.h 或 MFC 是否具有关联表类,它具有来自盒子的序列化方法?或者网上有没有其他好的C++容器?

提前谢谢你。

【问题讨论】:

  • MFC 的CMap 确实支持序列化。如果我必须在 MFC 和标准库 + Boost 之间进行选择,我更喜欢后者。
  • 另外一点:看起来您的std::map&lt;point, std::list&lt;h_stat&gt;&gt; 几乎等同于std::multimap&lt;point, h_stat&gt;。不过,根据您的使用方式,multimap 可能会更干净。
  • 列表按与点的距离 h_stat.point 排序。我去看看,是不是multimap支持一个sorted_insert方法。
  • 如果您在两个字段上都进行排序,那么您可能需要更多类似的内容:std::set&lt;std::pair&lt;point, h_stat&gt;&gt;
  • 一方面h_stat有很多,列表中的第一个h_stat是最好的。

标签: c++ map stl hashmap associative-array


【解决方案1】:

s11n 是一个 C++ 序列化库,声称它...

可以轻松序列化各种 POD(普通旧数据类型)、大多数 STL 容器和用户定义的可序列化类型。

您可以考虑使用它(AFAIK,它会根据成分的序列化自动序列化容器)。

否则,由于您的项目很小,您应该能够(没有s11n)手动向每个类添加序列化操作。使用 C++11 应该相对容易(感谢 ranged for 循环、auto、lambda 表达式)。

【讨论】:

  • 不幸的是,我使用的是 MS VS 2010,据我所知,有一个旧的 C++。
  • 老实说,我懒得实现转储map、转储列表、转储h_stat struct等方法。将boost链接到MS VS也很懒。我希望找到灵丹妙药)))谢谢,我会看看s11n。也许是。
【解决方案2】:

使用 MFC,您绝对可以轻松地使用 CMap 进行序列化,并且非常轻松地使用 make classes serializable

但是它不是那么便携。另一种选择是boost,它也为标准容器提供序列化(另见this answer 类似问题)

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多