質問: " << itr->second << "\n"; // 値を表示 } ``` (上記URLより引用) のようにすればいいようです。 例えばマシンをシャットダウンする場合、 当然メモリ上のハッシュテーブルを上記のような方法で退避する必要があると思います。 しかし、この方法で退避すると、HDDの容量こそ削減できるものの、 再起動時にハッシュ値を全て再計算する事になると思います。 <<質問2>> ハッシュテーブルのバイナリをそのままHDDに退避する事は可能ですか? (全て自作ならこのくらいはそれ程難しい話しではないと思うのですが......たぶん) あるいは、一件一件退避するとして、そのコストは......どの程度でしょうか? (もちろん規模と実装に依るのは分かっているのですが、 見当が付かないので、どうすればいいか困っています。 処理が30秒で終わるのか、1時間かかるのか。 ) --- <<質問3>> `unordered_map`を用いるとして、ハッシュテーブルのサイズが、 メインメモリの容量を越えてしまった場合、どうなるのでしょうか? また、その場合の解決策について教えて下さい。 --- 最後に、 MySQLなどのデータベース?がC++から使えるかどうかは良く分かりませんが、 取りあえず、今回は余り使いたくないです。 ライセンスを気にしなくてはいけない程のコードは書いていませんが、 巻き込まれたくは無いです。 ただ、もし、随分と簡単にMySQLなどのデータベースが、 この問題を明快に解決してくれるのであれば、 使えて損は無いので、ちょっと気になります。 (でもなるべくC++で作りたい、というのが本音です。)
回答: アプリケーションの要件を見ると`unordered_map`では機能が貧弱ですので、LevelDBなどの永続化できるKVSの利用をおすすめします。 `unordered_map`はすべてのデータをメモリ上に置いているのでアクセスは速いですが、データが増えるとメモリを圧迫しますし、データを永続化する場合の処理を自作しなくてはなりません。(boost::serializationなどを使う手もありますが) `LevelDB`の場合は自動でデータをHDDに保存してくれますし、必要に応じて`Cache`としてデータをメインメモリ上に置くのでアクセス速度とメモリ使用量のバランスを取ることができます。質問者さんが心配している部分はライブラリ側でうまく取り計らってくれるということになりますので、`unordered_map`をそのまま使うよりずっと便利です。