2016-05-11 3 views
2

ostringstreamのマップまたはunordered_mapを使用することはできますか?それはいかに効率的ですか? 「id」でストリームを生成したい:ostringstreamのハッシュマップ?

my_logs["info"] << "stuff" 
my_logs["info"] << "stuff" 
my_logs["debug"] << "stuff" 
+0

はい。しかし、my_logs(foo)を使用する方が柔軟性があります(他のコードを変更せずにmy_logsのタイプを変更できるため)。 –

答えて

3

はい。 mapped_typestd::mapでもstd::unordered_mapでもoperator[]のところに置かなければならないという唯一の要件は、DefaultConstructibleであるということです。 std::ostringstreamはDefaultConstructibleなので、これは完全に有効なコードです。

地図の検索と同じくらい効率的です。これは、プログラムの残りの部分で十分です。 ostringstreamでログを記録している場合、追加のマップ参照が残りのログに対して重要になるかどうかは疑問です。しかし、それが問題であれば、代わりに参照を保持することができます:

auto&& log_info = my_logs["info"]; 
// ... 

log_info << blah; 

参照を使用してください。参照はいずれのマップでも無効になりません(後続のログを消去しない限り)。

+0

http://coliru.stacked-crooked.com/a/36bacb3a03e1be81 – vinnylinux

+0

簡単な質問:どのように私のバッファに残っているのを検出できますか? – vinnylinux

+0

@vinnyあなたはまだすべての 'include'sが必要です... – Barry