2012-03-19 3 views
3

次のコードを実行すると、map/setイテレータがインクリメンタルエラーではなくなりました。C++でイテレータをインクリメントできないエラーをマップ/設定しました

typedef std::multimap<int, int> MapType; 

assgnt::MapType my_map; 
assgnt::MapType::iterator it; 
for(it = my_map.begin(); it != my_map.end();) 
{ 
    my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 
    ++it; 
} 

私はassgnt::MapTypeが何であるかを知っているが、ループのために別のassgnt::MapType内部my_mapに割り当てるいない

+2

:あなたは一時的なマップを使用することができ、同じ効果を達成するために

? –

+0

私もそれを試しました...同じエラーが発生しました... Googleで検索しているうちにどこかで見つけたのは++です。ループのために取り出されていましたが、それは彼らのために働いていました...しかし、 – user1277070

+0

この 'MapType'が何であるか知る必要があります。どうやら単純な 'std :: map'ではないでしょうか? – leftaroundabout

答えて

5

、良いことはできません助けてください:

my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 

あなたは以上イテレータを再割り当てする必要があります。

for(it = my_map.begin(); it != my_map.end(); ++it;) { 
    my_map = obj1.addGoodNeighbours(it->first, it->second, my_map); 
    it = my_map.begin(); 
} 

しかし、私はコードが正しいとは限りません。基本的には反復処理中に反復処理を行っている構造体を破壊しています。

EDIT:現在MapTypeが何であるかはわかります。上記のすべてがまだ正しいです。マップを反復する間にマップを再割り当てすることはできません。

+0

MapTypeは - typedef std :: multimap MapTypeです。 – user1277070

+0

assgntは、「typedef std :: multimap MapType;」というクラスの名前です。 – user1277070

+1

と申します。 obj1.addGoodNeighboursが何をするかはわかりません。 – mfontanini

1

マップの反復処理中にマップを変更しています。 stdコンテナではサポートされていないため、プログラムのバグです。現在、オブジェクトを完全に上書きしていますが、要素を追加するだけでは詳細はサポートされていません。

デバッグモードになっている可能性が高いため、このエラーが発生している可能性があります。本番環境でクラッシュすると、私は驚くことはありません。なぜあなたは `++直接のための構築物にit`入れない

assgnt::MapType my_map; 
assgnt::MapType tmp; 

for (auto it = my_map.begin(); it != my_map.end(); +it) { 
    // you need to change addGoodNeighboors to add elements in place instead of creating a new map 
    obj1.addGoodNeighbours(tmp, it->first, it->second, my_map); 
} 

my_map.insert(begin(tmp), end(tmp)); 
+0

forループの中に余分な '+'を忘れました。 '+ i' –

関連する問題