如何将STL map保存到文件

3

是否可以将STL map保存到文件中?我想加载文件以便节省时间。谢谢!


什么是STL映射? - user13831085
3个回答

6

好的,您可以手动完成此操作。如果不想这样做,最简单的方法是使用boost.serialization,它支持所有标准容器:

std::ofstream ofs("output_file");

// create class instance
std::map<int,string> whatever;

// populate map.

// save data to archive
{
    boost::archive::text_oarchive oa(ofs);
    // write map instance to archive
    oa << whatever;
    // archive and stream closed when destructors are called
}

你可以看到反向操作是如何工作的(从存档中读取),而且你也可以使用二进制存档。(你还需要一堆包含文件,但你可以从文档中获取这些。)

很遗憾,没有直接从内存映射文件中保存/加载的方法。 - rxantos

2
template<class A, class B>
void fn SaveMap(std::map<A, B>& savethismap)
{
  ofstream tfStream("filename");
  tfStream << savethismap.size() << std::endl;
  typedef std::pair<const A, B>& pr;
  BOOST_FOREACH(pr p, savethismap)
  {
     tfStream >> p.first << std::endl << p.second << std::endl;
  }
  tfStream.close();
}

这个保存了所有内容。我将其模板化,以便您可以进行专业化,我尝试使用A:std :: string和B:int进行了测试。对我来说效果很好。

希望能有所帮助。


问题:是的,我们可以称之为“序列化”,但实际上只是将键和值写入文件。这与其他序列化方法(如boost.serialization)相比,性能(读/写速度等)如何?另外,一些想法:1)通常我们可以使用基于范围的for循环而不是BOOST_FOREACH。2)错别字:>>的方向。 - starriet

0

额,我的意思是保存整个地图,这意味着我不需要再次生成地图,而是可以直接从文件中读取它。 - Jianzhong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接