我有一个stl容器,它保存了很多数据。
例如,定义是:
std::unordered_map<std::string, std::vector<int32_t> > m; // there are 10 million data in this container
我想要的是将它保存在一个文件中,然后下次,我可以读取这个文件来快速恢复它。
我觉得正常的方式,比如:
write(&m, sizeof(m))
不起作用,因为它只保存指针。
那么,如何将其保存在文件中并通过读取文件恢复呢?
选择一个文件格式,例如CSV或一个简单的列表,迭代您的容器并编写每个元素:
for (const auto &el : m) {
file << el.first << '\n' << el.second.size() << '\n';
for (const auto &vec : el.second) {
file << vec << '\n';
}
}
我不确定CSV是否支持可变长度行。则可以使用
std::string first;
std::size_t count;
while (std::getline(file, first) && file >> count) {
std::vector<int32_t> v(count);
for (std::size_t i = 0; i < count; ++i) {
file >> v[i];
}
m[first] = v;
}
这只是个草图。您可能需要修复一些问题,如运算符>>
之后的std::ignore
。