Можем ли мы использовать прямую итерацию для удаления элементов в 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);
Согласно пункту 12 пункта 6.3.1 [tr.unord.req]:
… Члены стирания должны делать недействительными только итераторы и ссылки на стертые элементы.
То есть код выше должен быть в порядке.
Да, ваш вопрос содержит правильный ответ:
it = employeeTable.erase(it);