Стирание элементов в std :: tr1 :: unordered_map

Можем ли мы использовать прямую итерацию для удаления элементов в 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);

3

Решение

Согласно пункту 12 пункта 6.3.1 [tr.unord.req]:

… Члены стирания должны делать недействительными только итераторы и ссылки на стертые элементы.

То есть код выше должен быть в порядке.

6

Другие решения

Да, ваш вопрос содержит правильный ответ:

it = employeeTable.erase(it);
3

По вопросам рекламы [email protected]