C++ でプライベート静的定数マップを初期化するにはどうすればいいですか? 質問する

C++ でプライベート静的定数マップを初期化するにはどうすればいいですか? 質問する

必要なのは辞書か連想配列だけですstring=> int

この場合、C++ には型マップがあります。

しかし、すべてのインスタンスに対して必要なマップは 1 つだけです (-> static)。このマップは変更できません (-> const)。

私はブーストライブラリでこの方法を見つけました

 std::map<int, char> example = 
      boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c');

このライブラリを使用しない他の解決策はありますか? このようなことを試してみましたが、マップの初期化には常に問題があります。

class myClass{
private:
    static map<int,int> create_map()
        {
          map<int,int> m;
          m[1] = 2;
          m[3] = 4;
          m[5] = 6;
          return m;
        }
    static map<int,int> myMap =  create_map();

};

ベストアンサー1

C++11 標準では統一された初期化が導入され、コンパイラがサポートしていればこれがはるかに簡単になります。

//myClass.hpp
class myClass {
  private:
    static const map<int,int> myMap;
};

//myClass.cpp
const map<int,int> myClass::myMap = {
   {1, 2},
   {3, 4},
   {5, 6}
};

参照このセクションはProfessional C++から、unordered_maps 上。

おすすめ記事