ログの書き出しにはmapを使おう

C++ にはmapというクラスが用意されています.このクラスは, vector のようにindexで配列の要素にアクセスするのではなく,キーと呼ばれる「名前」でデータを呼び出すことができます.このmapクラスはログをファイルに書き出す場合に非常に効果的です.

よくあるログデータは次のような形式で書かれます(,区切りのテキストファイル(csvファイル)).

そして,このようにファイルを書き出すコードは次のようになります.

このコードで問題になるのが,vector内のデータの順番です. まず,headerの文字とデータの対応は常に正しくなければなりません.dataに変数を代入する際に,書き込む順番を間違えただけで正しくログが取れなくなります.上のコードの場合はheaderの定義とファイルの書き込むコードが近く比較しながらかけるので,まだ間違えにくいです.しかし一般的にdataに変数を代入するのはloop部分の最後になるので,代入する順番を間違えることが多々あります.

また,後でデータを変更した場合にはさらにややこしいことになります.例えば,

と変更した場合には

1以降を全てずらさないといけない上に,また順番を間違えてしまう危険性があります.

そこでstd::mapを使うことでこの問題が解決できます.
std::mapを使うと,コードは次のように書き換えることができます.

このようにstd::mapの場合は,数字ではなく名前の文字列で呼び出せ,ファイルを書き込む時もheaderの順番に合わせて自動で書き込めるので,代入する時の順番を気にする必要がありません.

mapを使って,ログを書き出す際のバグを減らしましょう!
また,ファイルを書き出す時だけではなく,データをjsonなどで送信する時も同様の効果があります・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です