当前位置: 首页 > 知识库问答 >
问题:

如何在磁盘中保存stl容器?

微生欣怡
2023-03-14

我有一个stl容器,它保存了很多数据。

例如,定义是:

std::unordered_map<std::string, std::vector<int32_t> > m;  // there are 10 million data in this container

我想要的是将它保存在一个文件中,然后下次,我可以读取这个文件来快速恢复它。

我觉得正常的方式,比如:

write(&m, sizeof(m))

不起作用,因为它只保存指针。

那么,如何将其保存在文件中并通过读取文件恢复呢?

共有1个答案

长孙智刚
2023-03-14

选择一个文件格式,例如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

 类似资料:
  • 关闭没有备份的笔记本电脑和存储的数据。也许如果你拉电池,它不会保存)Redis上传数据到内存本身?如何设置自动保存后,每次更改?还是更容易运行一个命令手动?

  • 下面的代码在内存中创建了一个文件。 我想把那个pdf文件保存在磁盘上以便查看。我将如何在python中实现它?

  • 问题内容: 我正在使用Picasso在我的android应用中显示图像: 我已启用调试,并且始终显示红色和绿色。但是从不显示黄色 现在,如果我下次加载同一张图片,并且互联网不可用,则无法加载图片。 问题: 它没有本地磁盘缓存吗? 我如何启用磁盘缓存,因为我将多次使用相同的映像。 我是否需要向Android清单文件添加一些磁盘权限? 问题答案: 这就是我所做的。效果很好。 首先将OkHttp添加到a

  • 我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null

  • 我一直在使用系统保存截图的方式将位图保存到磁盘和图库中。这在Android4.2及之前版本中有效,但在Android3.3中无效。 相关代码: 此处为完整代码。 然而,在4.3(新的Nexus 7)中,我在第二行得到了FileNotFoundException。我在网站上看不到与此相关的4.3中的任何更改。 那么,将图像保存到磁盘和图库的正确方法是什么呢? 已验证: 使用此方法装载存储 image

  • 警告:容器被设计为无状态的实例,任何需要持久化的数据,请采用数据库或文件系统保存在容器实例之外,我们不对保存在容器内的数据提供任何保障。当 DaoCloud 需要迁移,或用户扩容容器资源时,容器内的数据将会遗失,并且无法找回。 使用数据库服务 DaoCloud 在服务集成模块中提供了 MySQL、Redis、MongoDB、InfluxDB 等数据服务,如您需要做内容的持久化保存,可以选择使用 M