擦除 std::tr1::unordered_map 中的元素

Erasing elements in std::tr1::unordered_map

本文关键字:map 元素 unordered std tr1 擦除      更新时间:2023-10-16

我们可以使用前向迭代来擦除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);

根据 6.3.1 [tr.unord.req] 第 12 段:

。拭除成员应仅使迭代器和对拭除元素的参照失效。

也就是说,上面的代码应该没问题。

是的,您的问题包含正确答案:

it = employeeTable.erase(it);