広告
2022/06/09

C++ std::mapを値入りで初期化するのは初期化子リストでOK

タグ:c++

C++11からmapも初期化子リストで初期化できるようになっている。 初期化子リストの中にはキー、バリューのペアを入れていけばよい。
もちろん関数内で値をひとつずつ設定してもよいが、 constで後から値を入れられないときなどには困る。そこで
    #include

    class StaticConstMap
    {
      public:
        static const std::map hoge;
    };
    const std::map StaticConstMap::hoge({{1, 2}, {3, 4}});

    int main()
    {
      return 0;
    }
  
の様にすると初めから値が入っていて、後から書き換えはできないマップができる。

もしconstでければ
    #include

    class StaticConstMap
    {
      public:
        static std::map hoge;
    };

    int main()
    {
      StaticConstMap::hoge[1] = 2;
      StaticConstMap::hoge[3] = 4;
      return 0;
    }
  
のように後から入れても同様の結果が得られるはずではあるが、 書き換え不可にしてしまうとこうはいかないので重宝する。

なお古いコンパイラではC++11を明示的に有効化しないと使えないので注意。