2

複製:

最初から最後まで繰り返しながら、マップ要素で erase を呼び出すとどうなりますか

stdmap からアイテムをフィルタリングする方法

私はmap1<string,vector<string>>このマップ「itr」のイテレータを持っているマップを持っています。「itr」が指すこのマップからエントリを削除したい。関数 map1.erase(itr); を使用できます。この行の後、イテレータ「itr」は無効になります。私のプロジェクトの要件に従って、イテレータは次の要素を指す必要があります。事前にこれを再確認するのを手伝ってくれる人はいますか:) santhosh

4

4 に答える 4

5

消去する引数としてイテレータを渡すときに、イテレータを後置インクリメントできます。

myMap.erase(itr++)

このようにしてitr、消去前にポイントされていた要素が削除され、イテレータがインクリメントされてマップ内の次の要素をポイントします。これをループで実行している場合は、反復子を 2 回インクリメントしないように注意してください。

同様の質問からのこの回答、またはこの質問に対する回答も参照してください。

于 2008-11-06T15:18:29.073 に答える
2
map<...>::iterator tmp(iter++);
map1.erase(tmp);
于 2008-11-06T14:51:10.063 に答える
1

簡単な答え:

map.erase(iter++);  // Post increment. Increments iterator,
                    // returns previous value for use in erase method

前に質問と回答:
最初から最後まで繰り返しながらマップ要素でeraseを呼び出すと
どうなりますかstdmapからアイテムをフィルタリングする方法

于 2008-11-06T18:15:37.890 に答える
0
#include <boost/next_prior.hpp>

map<string,vector<string> >::iterator next = boost::next(itr);
map1.erase(iter);
iter = next;
于 2008-11-06T14:56:43.453 に答える