Windows 7 64 ビットの場合マップをセットアップする
map<string, string> database;
database["user"] = "123";
メイン関数の一部ですが、マップの内容を印刷するにはどうすればよいですか? そして最も重要なのは、他の関数で使用できるように、どのようにグローバル変数に変換できるのでしょうか? マップの印刷プロセスを、マップが作成された場所とは別の機能に入れようとしています。
C++1 を利用できる場合 (ステファンの回答の補足として: C++11 ではラムダまたはラムダは実際には必要ありませんstd::for_each
)、範囲ベースを使用して反復を実行できます。
for ( std::pair<std::string,std::string> const &p : database)
std::cout << "key=\"" << p.first << "\" value=\"" << p.second << "\"" << std::endl;
他の関数で使用する場合は、変数をグローバルにする代わりに、いくつかのことを検討してください。
for_each、範囲ベースのbeginとend、lambdaなどの C++11 機能を使用することをお勧めします。
std::for_each(std::begin(database), std::end(database),
[&database](std::pair<std::string, std::string> p) {
std::cout << "Key : " << p.first << "\tValue : " << p.second << std::endl;
});
次に、マップをグローバル変数にすることは避けたいと思います。グローバル定義には理由がありますが、コンテナのためですか? (これはプロジェクトの大きさにもよるかもしれませんが、グローバル変数を取り除き、本当に必要な場合は名前空間に入れましょう)
マップをクラスにカプセル化し、マップの内容を変更する関数を提供してみませんか?印刷施設も含めて? クラスのすべてのユーザーがマップの同じコンテンツを持っていることを確認したい場合 (つまり、これは同じインスタンスを意味します)、クラスをシングルトンに変えることができます。