例と既存の演習を見てマルチマップを練習していますが、今はかなり混乱しています。誰でもここでmyMap.erase(iter-> second)で何が消去されているのか教えてもらえますか?マルチマップ - .erase()関数についての不思議
multimap<int, int> myMap;
for (int i = 0; i < 3; i += 2)
myMap.insert(make_pair(i + 1, i * 2));
for (int i = 0; i < 5; i += 2)
myMap.insert(make_pair(i, i + 2));
multimap<int, int>::iterator iter = myMap.begin();
++iter;
++iter;
myMap.erase(iter->second);
++iter;
cout << iter->first << iter->second << endl;
これまでのところ私は、マルチセットは、(0,2)、(1,0)、(2,4)、(3,4)、(4,6)であることを知っています。しかし、他の可能なイテレーター位置でペアを印刷しようとしたとき、イテレーターをインクリメントする場合は、myMap.erase(iter->second)
行が存在する限り、印刷できなくなりました(4,6)。これはマップ/反復子を参照不可能なエラーに設定しません。
ここでは正確に何が起こっていますか?実際に何が「消去」されたのですか?
したがって、文字通り4で(3,4)を取り、「4」番目の要素を別名(4,6)で消去しますか? iteratorがiter-> secondを消去するとき(3、2)オンだった場合、(1,0)の2番目の要素が消去されていたでしょうか? – BaloneyOs
いいえ、それは間違っています、私の編集を参照してください。 – acraig5075
ああ、鍵はペアの最初の要素です。私は何かを消去しようとし、これと一致します。助けてくれてありがとう! – BaloneyOs