c++ - 如何将stl容器保存在磁盘中?
问题描述
我有一个 stl 容器,可以保存大量数据。
例如,定义是:
std::unordered_map<std::string, std::vector<int32_t> > m; // there are 10 million data in this container
我想要的是将它保存在一个文件中,然后下一次,我可以读取这个文件以快速恢复它。
我认为正常的方式,如:
write(&m, sizeof(m))
不起作用,因为它只保存指针。
那么,我怎样才能将它保存在文件中并通过读取文件来恢复它?
解决方案
选择一种文件格式,例如一个简单的列表,遍历您的容器并写入每个元素:
for (const auto &el : m) {
file << el.first << '\n' << el.second.size() << '\n';
for (const auto &vecEl : el.second) {
file << vecEl << '\n';
}
}
然后你可以读取文件
std::string first;
std::size_t count;
while (std::getline(file, first) && file >> count) {
std::vector<int32_t> v(count);
for (auto &vecEl : v) {
file >> vecEl;
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
m[first] = v;
}
这只是一个草图。您可能必须添加错误检查。
推荐阅读
- javascript - 如何处理来自可观察的不同类型的数据?
- spring - Vaadin 14 和 Push:在请求线程之外访问 Spring SecurityContext 和 Authentication
- javascript - 获取多个父母的特定孩子数据
- flutter - 颤动如何从 SfRadialGauge 中删除空间或填充
- database - 在 HomeController (Laravel 8) 中按类别名称获取帖子
- spring - 为什么在 Spring 中创建一直发生错误?
- angular - 自定义 ag gird 中的最后一行
- key-value - 如何将 consul 与 cloudflare 连接?
- reactjs - 如何在 Electron 和 CRA 的生产环境中使用 loadUrl 或 loadFile?
- scala - `Coder[P <: Product]`的Scala 2宏类型类派生以错误`P不带参数`结束