web-dev-qa-db-ja.com

C ++ 11でマップリテラルを作成するにはどうすればよいですか?

Pythonでは、次のようなマップリテラルを記述できます。

mymap = {"one" : 1, "two" : 2, "three" : 3}

C++ 11で同等の方法を実行するにはどうすればよいですか?

15
abw333

あなたは実際にこれを行うことができます:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};

ここで実際に起こっていることは、std::mapがキー値タイプのstd::pair、この場合はstd::pair<const std::string,int>を格納することです。これは、c ++ 11の新しい統一初期化構文が原因でのみ可能です。この場合、コンストラクターのオーバーロードはstd::pair<const std::string,int>と呼ばれます。この場合、std::mapには、外側の中括弧を担当するstd::intializer_listを持つコンストラクターがあります。

したがって、Pythonのクラスとは異なり、初期化リストを受け取るコンストラクターを作成する限り、この構文を使用して自分自身を初期化できます(または統一された初期化構文が適用可能です)。

30
aaronman

あなたはこれを行うことができます:

std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
14
abw333