2016-12-13 4 views
0

のために、私はタイプ定義されている:私はキーを使用してリストにアクセスしようとするとんが実行可能なオーバーロードされた演算子はありません[]型の

string v = "A12"; 

::私は鍵を持って

typedef unordered_map<string, list<string>> Graph; 

for (auto w = g[v].begin(); w != g[v].end(); w++) 
    { 

     ... 
    } 

gがタイプGraphの場合、エラーが発生します。

No viable overloaded operator[] for type 'const Graph' 

この問題を解決するにはどうすればよいですか?

+1

'std :: vector 'を代わりに使用してください。 'std :: list'は任意のinexedアクセスを提供しません。 –

+0

@πάνταῥεῖリスト上でインデックス演算子を使用しようとしていません。マップ上で使用しています。 – Bob

+2

'g'は使用しているコンテキストで' const'です。それを 'const'にしないでください。 C++ 11以降を使用している場合は、インデックス演算子の代わりに 'at'を使用してください。 – AndyG

答えて

3

gconst graph&です。索引作成演算子[]は、マップの新しい要素を作成して、それを変更する必要があります。そのため、const graph&(問題はconst)には使用できません。

代わりにg.at(key)を使用して、キーが存在しない場合は例外をスローすることができます。

+0

これは最善の方法でしょうか? '' 'リスト theList; try { adjList = g.at(v); } catch(int e){ cout << e << endl; } '' ' – Bob

+1

@Bob、' auto iter = g.find(v);を使うことをお勧めします。 if(iter!= g.end()){...} '。 –

+0

'' 'auto iter = g.find(v); if(iter!= g.end()){ list adjList = g.at(v); } '' ' @RSahu – Bob

関連する問題