• ベストアンサー

mapの初期化

こんにちは。 STLのmapについて質問です。 mapで変数を宣言したときに定数初期値を設定したいのですが、どのようにするばよろしいのでしょうか?例えば以下のような感じにしたいのです。 const map<string, int> month = { {"October", 10}, {"November", 11}, {"December", 12} }; 環境はVC2005です。 ご存じでしたら教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

お茶を濁せばこんな感じ。 #include <map> #include <string> #include <utility> #include <iostream> using namespace std; int main() {   typedef pair<string,int> item;   pair<string,int> table[] = {    item("October", 10),    item("November", 11),    item("December", 12)   };   map<string,int> m(table, table+3);   for ( map<string,int>::const_iterator it = m.begin();      it != m.end(); ++it ) {     cout << it->first << ':' << it->second << endl;   } }

ToriManma
質問者

お礼

ご返答ありがとうございます。 かなり苦しい感じになりますね。 別の方法を考えることにいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

残念ならができません。

ToriManma
質問者

お礼

やっぱり無理なのですね。 ご返答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • STL mapでアクセス違反

    VC++2005 Express Editionを使用しています。 (Platform SDKを別途インストールしています。) STL mapの変数を宣言すると、その部分でアクセス違反が発生します。 これだけのコードも動きません。 #include <map> using namespace std; int main() { map<int, int> m; m.insert(pair<int, int>(0,10)); return 0; } グローバル宣言するれば、実行直後に止まります。 なにか対策があればよろしくお願いします。

  • MAPコンテナの宣言部分の表記に関して質問です

    C++でSTLのMAPを勉強しだしたのですが、 よく分からない部分を見つけました。 以下のようにmapを使う際に、 mapコンテナの宣言をするのは理解できたのですが、 map<string, int> mmbr ; // (string型,int型)の対データを管理 map<int, int> ikk ; //(int型,int型)の対データを管理 他人が作成したサンプルを見ていたら、 以下のようにmapのコンテナ宣言がされていました。 ********************************************************* typedef KEY key_type; typedef typename std::map<key_type, value_type> container_type; ********************************************************* 1行目でtypedefしているだけなので理解できるのですが、 2行目で行っているmapコンテナの宣言の意味が どうも意味が分からないでいます。 mapコンテナの宣言で、 <string, int>や<int, int>のようにせず、 <key_type, value_type>としているのは、 どういう意味なのでしょうか? どうぞ宜しくお願い致します。

  • C++ の map についてです

    C++の初心者です。よろしくお願いします。 DirectXを使っていて簡単なゲームを作っていまして、 mapを使っていると、このようなエラーが出てしまいどうしても理由わかりませんでした。 class D2DMap : public GameTexture{ protected: GameTexture** CopyTexture; int MaxMass; int WidthMass; int HeightMass; int WidthMassPixel; int HeightMassPixel; int MassInfo[30][30]; public: D2DMap(); virtual ~D2DMap(); HRESULT LoadMapTexture(int widthmass, int widthmasspixel,int heightmass, int heightmasspixel, const char* FileName, D3DCOLOR color); HRESULT LoadTextMass(const char* FileName); int GetWidthMassPixel(){ return WidthMassPixel;} int GetWidthMassNum(){ return WidthMass;} int GetHeightMassPixel(){ return HeightMassPixel;} int GetHeightMassNum(){ return HeightMass;} int GetMassInfo(int x, int y){ return MassInfo[y][x];} void DrawMap(D3DCOLOR color); void DrawCopyMap(D3DCOLOR color); void SetCopyTex(GameTexture* copy){ CopyTexture= &copy;} void Delete(){} }; map<string , D2DMap*> MapBox; と定義して string Name="--------"; D2DMap map; MapBox.insert( map<string, D2DMap*>::value_type(Name, &map)); としたとこと error C2275: 'std::string' : この型は演算子として使用できません 'std::string' の宣言を確認してください。 error C2059: 構文エラー : '>' error C2039: 'value_type' : '`global namespace'' のメンバではありません というエラーが出てきました。 mapのfind や iterator は可能なのですがinsertの場合エラー となり、理由が全く分かりません。詳しい方アドバイスをお願いしたい のですが、よろしくお願いします。 VC++2008 を使っています。

  • マップとアルゴリズム

    またまた質問です。 以下の処理をさせるとエラーが出ます。 どなたか見ていただけますか? 環境はWindows XP, Visual Studio.NETです。 -----処理部分------------------ map<char, int> m; for(i=0; i<10; i++){  m.insert(pair<char, int>('A'+i, i)); } reverse(m.begin(), m.end()); map<char, int>::iterator p; p = m.begin(); while( p != m.end() ){  cout << p->first << " " << p->second << endl;  p++; } ------以下エラーログ--------------- C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\utility(16) : error C2166: 左辺値は const オブジェクトに指定されています。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\utility(46) : コンパイルされたクラスのテンプレートのインスタンス化 'void std::swap<const _Ty1>(const _Ty &,const _Ty &)' の参照を確認してください with [ _Ty1=int, _Ty=int ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\utility(45): クラス テンプレートのメンバ関数 'void std::pair<_Ty1,_Ty2>::swap(std::pair<_Ty1,_Ty2>::_Myt &)' のコンパイル中 with [ _Ty1=const int, _Ty2=int ] ClusteringMain.cpp(45) : コンパイルされたクラスのテンプレートのインスタンス化 'std::pair<_Ty1,_Ty2>' の参照を確認してください with [ _Ty1=const int, _Ty2=int ] C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\utility(16) : error C2166: 左辺値は const オブジェクトに指定されています。

  • STLのmapについて

    いつもお世話になっております。 今回はmapについてお聞きしたいです。 現在mapを使っていますが、mapを構造体に入れようと struct PARAM {   int  i;   char  str;   map<int, int>  map; }; のようにしていますが、<が不正です、のようなことを言われてうまくいきません。 構造体にmapを入れることは可能なのでしょうか? 可能ならばその方法を教えていただけると幸いです。 以上、ご教授願います。 環境は OS WindowsXP SP2 VC++6.0 です。

  • 配列の初期化について

    今取り組んでいるC言語の課題の中で、 二次元配列"map[100][100]"を初期化するようにしたいのですが、 intでcomx,comyという二つの変数を宣言して、 for(comy=0;comy<100;comy++){   for(comx=0;comx<100;comx++){     map[comx][comy]=0;   } } のように初期化を図ったのですが、実行するとなぜか初期化が終わらず、 計算しっぱなしで止まってしまいます。(コンパイルは出来ます) 解る方、どこがおかしいのか指摘お願いします。。 (質問ミスっていたので質問し直しました)

  • STL vectorの初期化

    STL vectorの初期化についてなんですが 以下のようなクラスのprivateなメンバ変数としてvectorを定義し それをメソッド内のループ処理にて初期化しながら使用したいのですが 初期化の仕方が分かりません。コンストラクタを呼べば初期化されるようですが 以下のようにヘッダとソース内で2度同じような宣言をしてしまっても問題ないのでしょうか? //=== test.h === class test { private : vector<int> array; public : int fnc(); }; //=== test.c === int fnc() { for (int i = 0; i < 10; i++) { //★ここで初期化したい vector<int> array;  ←これで問題ないか? for (int j = 0; j < 10; j++) { array.push_back( md ); } } } C#などでは宣言とインスタンス生成を別に分けられたのですがC++も同様の事が出来るのでしょうか? 一応「array = new vector<int>;」といれて見たのですがエラーが出ました。

  • 二次元配列の初期化が出来ません

    今取り組んでいるC言語の課題の中で、 二次元配列"map[100][100]"を初期化するようにしたいのですが、 intでcomx,comyという二つの変数を宣言して、 for(comy=0;comy<100;comy++){   for(comx=0;comx<100;comx++){     map[comx][comy]=0;   } } のように初期化を図ったのですが、実行するとなぜか初期化が終わらず、 計算しっぱなしで止まってしまいます。(コンパイルは出来ます) 解る方、どこがおかしいのか指摘お願いします。。

  • map::find()の戻り値が変数に入ってくれません。

    こんにちは、boundaryといいます。 ユーザー型のキーとユーザー型の値をmapに挿入したのです が、map::find()の戻り値が変数に入ってくれません。 operator=を定義しないといけないのかなと思いやってみた のですがうまくいきません。 std::map<ユーザー型,ユーザー型>::iteratorを定義しない といけないのでしょうか? どなたかお知恵をお貸しください。 よろしくおねがいします。 windows2000 vc6.0sp5 ps.ソースコードを載せようとしたのですが、質問文字数が 最長文字数を超えるようで質問する事ができません。 ですのでかなり端折っています。(スミマセン) /* mapのキーです。 */ typedef struct _StateAndReturn { int State; int Return; } StateAndReturn; /* mapの値です。 */ struct NextStateAndFunc { NextStateAndFunc& operator=(const NextStateAndFunc& X){ NextState = X.NextState; MemFuncPointer = X.MemFuncPointer; } typedef int (Funcs::*pFunc)(); int NextState; pFunc MemFuncPointer; }; class CEventMap { private: typedef int (Funcs::*pFunc)(); typedef map<StateAndReturn, NextStateAndFunc, my_less> _EventFuncMap; _EventFuncMap EventFuncMap; public: void Set(int StateNow, int ServerReturnCode, int StateNext, pFunc pF) { /*登録します。*/ } const NextStateAndFunc Answer(int StateNow, int ServerReturnCode) { StateAndReturn tempStateAndReturn; tempStateAndReturn.State = StateNow; tempStateAndReturn.Return = ServerReturnCode; map<StateAndReturn, NextStateAndFunc>::const_iterator ite; ite = EventFuncMap.find(tempStateAndReturn); /* ←ここでエラーになります。 */ return ite->second; } };

  • static constメンバ変数(配列)の初期化について

    C++初心者です。 constメンバ変数の初期化について教えてください。 クラスの中に、static constメンバ変数(配列)を持ちたいのですが、 <コード1> class hoge { public : hoge(){}; virtual ~hoge(){}; static const int fuga[2] = {1, 2}; }; とすると、VC++ 2005では、 error C2059: 構文エラー : '{' error C2334: '{' の前に予期しないトークンがありました。関数の本体は無視されます というエラーが発生します。 何がいけないのでしょうか? また、下の様にするとOKでした。 <コード2> class hoge { public : hoge(){}; virtual ~hoge(){}; static const int fuga[2]; }; const int hoge::fuga[2] = {1,2}; こうすればコンパイルが通る事は分かったのですが、なぜこんな面倒な事をしないといけないのかが分かりません。 コード1では何がいけないのでしょうか? 以上、よろしくお願いします。