3

unordered_map の要素を消去するために前方反復を使用できますか?

unordered_map<string, int> employeeTable;
unordered_map<string, int>::iterator it;

for (it = employeeTable.begin(); it != employeeTable.end();) {
   int age = it->second;
   if (age < 18) {
      employeeTable.erase(it++);
   } else {
      ++it;
   }
}

上記が間違っている場合、標準は何を推奨していますか? 以下のようなもの

it = employeeTable.erase(it);
4

2 に答える 2

6

6.3.1 [tr.unord.req] パラグラフ 12 によると:

... 消去メンバーは、イテレーターと消去された要素への参照のみを無効にします。

つまり、上記のコードは問題ないはずです。

于 2012-10-01T22:09:16.213 に答える
3

はい、あなたの質問には正しい答えが含まれています:

it = employeeTable.erase(it);
于 2012-10-01T22:13:55.697 に答える