0

Windows 7 64 ビットの場合マップをセットアップする

    map<string, string> database;
    database["user"] = "123";

メイン関数の一部ですが、マップの内容を印刷するにはどうすればよいですか? そして最も重要なのは、他の関数で使用できるように、どのようにグローバル変数に変換できるのでしょうか? マップの印刷プロセスを、マップが作成された場所とは別の機能に入れようとしています。

4

4 に答える 4

0

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; 

他の関数で使用する場合は、変数をグローバルにする代わりに、いくつかのことを検討してください。

  • クラス内のデータベースを使用してすべての関数を集約/カプセル化する
  • マップ オブジェクトを関数に渡す
于 2013-07-21T22:09:59.003 に答える
0

for_each、範囲ベースのbeginendlambdaなどの 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;
});

次に、マップをグローバル変数にすることは避けたいと思います。グローバル定義には理由がありますが、コンテナのためですか? (これはプロジェクトの大きさにもよるかもしれませんが、グローバル変数を取り除き、本当に必要な場合は名前空間に入れましょう)

マップをクラスにカプセル化し、マップの内容を変更する関数を提供してみませんか?印刷施設も含めて? クラスのすべてのユーザーがマップの同じコンテンツを持っていることを確認したい場合 (つまり、これは同じインスタンスを意味します)、クラスをシングルトンに変えることができます。

于 2013-07-21T21:55:04.853 に答える