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

如何在磁盘中保存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

  • 问题内容: 在一个课堂项目中,我的老师告诉我们进行一些代码评估(C语言),并且这样做,我们需要在测试期间禁用磁盘缓存。 当前我正在使用Ubuntu 12.04,该怎么做? 谢谢。 问题答案: 您需要root用户权限才能执行此操作。您可以运行命令以禁用写缓存,在该驱动器中必须将驱动器替换为设备: 您还可以像这样选择性地禁用对单个分区的写缓存:。 要重新启用缓存,只需使用参数。 男子hdparm的,人