如何在删除元素时阻止重新散列std :: unordered_map?

vmr*_*rob 22 c++ iterator unordered-map hashtable map

我有一个std :: unordered_map,我将从via迭代中删除元素.

auto itr = myMap.begin();
while (itr != myMap.end()) {
    if (/* removal condition */) {
        itr = myMap.erase(itr);
    } else {
        ++itr;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想阻止地图执行任何昂贵的操作,直到我完成删除我需要删除的所有元素.我有一个有效的顾虑吗?我误解了内部存储的工作原理吗?

How*_*ant 10

在下列期间禁止无序容器重新散列erase:

[unord.req]/P14:

erase人员只能迭代器和引用无效被擦除的元素,并保留未擦除的元素的相对顺序.

[unord.req]/P9:

Rehashing使迭代器失效,元素之间的顺序改变,以及......

你的代码很好.