2011-07-19 4 views
2

STLマップをファイルに保存することはできますか?私は時間を節約するためにマップにファイルを読み込むことができます。ありがとう!STLマップをファイルに保存する方法

+0

はい、あります。あなたは大歓迎です:-) –

答えて

5

さて、あなたは手動で行うことができます。ない場合は、最も簡単な方法は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 
} 

あなたはまた、バイナリアーカイブを使用できるようにしてもどのように逆の工事(アーカイブからの読み取り)を参照してください、とすることができます。 (あなたもたくさんのインクルードが必要ですが、ドキュメントからこれらを得ることができます)。

+2

+1を手作業で行うこともできます – tomasz

+0

「http://www.codeproject.com/KB/stl/STL_Serialization_Library.aspx」という別の方法も見つけましたが、同じ方法かどうかはわかりません。 – Jianzhong

0

シリアル化で実行できます。ここでは、それを行う方法を説明するチュートリアルを見つけることができます: http://www.functionx.com/cpp/articles/serialization.htm

ただし、時間を節約できるかどうかはわかりません。

+0

Er、私が望むものは、マップ全体を保存していますが、私は再びマップを生成する必要はありませんが、ファイルから直接読むことができます。 – Jianzhong

1
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を使って試しました。それは私のためにうまくいった。

希望します。

関連する問題