2012-04-09 12 views
0

マップのベクトル内でマップ要素のキーをルックアップするために、次の関数を使用しています。マップのベクトル内のペアを見つける

この関数は、最初のベクトルインデックス(at(0))内の項目の値を正しく返します。しかし、それは2番目のインデックス内の要素にアクセスしようとするたびに失敗する((1))。マップが正しく挿入され、2番目のインデックスに配置されていると確信しています。

誰でも問題が表示されますか?

+1

'何をcur'されますか?各ループ反復で更新しないと、要素が存在しないときは認識されません。 – leftaroundabout

+1

'const char *'のマップキーは決して良い考えではありません。キーポイントが管理するメモリはどのように管理されていますか? – Chad

+1

今後このような問題を避けるために読めるようにしたいのであれば、C++ 11の砂糖を追加したいと思います: 'Entry * SymTab :: lookup(const std :: string&name)' '{' 'for (auto&cur:table)//テーブルはベクトル ' ' {' ' auto = cur.find(name);}です。 '' するif(!その= cur.end()) '' { '' COUT <<(* ITS)1次回<< ENDL; '' リターン&its->第二; '' } '' } ' '} ' – leftaroundabout

答えて

5

誰でも問題が表示されますか?

はい。 curは現在の地図を追跡しません。

ifラインを交換してみてください:

if (its != table.at(i).end()) 
+0

ああ、私はそれを見落として信じられない...ありがとう。 – Leif