【发布时间】:2018-06-14 08:49:01
【问题描述】:
作为一项实验,我正在尝试逐个元素地将std::map<std:string, ValueType> 序列化到二进制文件/从二进制文件序列化。
我正在使用这样的东西:
void Save(const std::string& fname, const MapType& c)
{
std::ofstream f(fname.c_str(), std::ios::binary);
boost::archive::binary_oarchive oa(f, boost::archive::no_header);
oa & c.size();
for (auto& e : c)
{
oa & e.first;
oa & e.second;
}
}
void Load(const std::string& fname, MapType& c)
{
std::ifstream f(fname.c_str(), std::ios::binary);
boost::archive::binary_iarchive ia(f, boost::archive::no_header);
int count;
ia & count;
for (int i = 0; i < count; ++i)
{
std::string key;
ValueType value;
ia & key;
ia & value;
c[key] = value;
}
}
顺便说一句:
using ValueType = boost::variant<bool, int, double, std::string>;
using MapType = std::map<std::string, ValueType>;
保存后,我将文件加载回来。 count 被正确读取,但第一个 key 给出了错误的分配异常。
有什么想法吗?
当我将binary_oarchive 和binary_iarchive 替换为它们各自的文本等效项时,相同的代码运行良好。
【问题讨论】:
标签: c++ string serialization boost