提问者:小点点

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


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

例如,定义是:

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

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

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

write(&m, sizeof(m))

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

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


共1个答案

匿名用户

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