首页 > 解决方案 > 如何将stl容器保存在磁盘中?

问题描述

我有一个 stl 容器,可以保存大量数据。

例如,定义是:

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

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

我认为正常的方式,如:

write(&m, sizeof(m))

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

那么,我怎样才能将它保存在文件中并通过读取文件来恢复它?

标签: c++serializationstl

解决方案


选择一种文件格式,例如一个简单的列表,遍历您的容器并写入每个元素:

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;
}

这只是一个草图。您可能必须添加错误检查。


推荐阅读