Pythonでは、次のようなマップリテラルを記述できます。
mymap = {"one" : 1, "two" : 2, "three" : 3}
C++ 11で同等の方法を実行するにはどうすればよいですか?
あなたは実際にこれを行うことができます:
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のクラスとは異なり、初期化リストを受け取るコンストラクターを作成する限り、この構文を使用して自分自身を初期化できます(または統一された初期化構文が適用可能です)。
あなたはこれを行うことができます:
std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};