我有一个 std::unordered_map,我将通过迭代从中删除元素。
auto itr = myMap.begin();
while (itr != myMap.end()) {
if (/* removal condition */) {
itr = myMap.erase(itr);
} else {
++itr;
}
}
在我完成删除所有需要删除的元素之前,我希望防止地图执行任何昂贵的操作。我拥有一个有效的关注点吗?我是否误解了内部存储的工作方式?
erase
操作下永远不会缩小。在rehash
操作下,桶的数量可以缩小,并且所有实现都会这样做。 - Howard Hinnant