我有一個std :: unordered_map,我將通過迭代去除元素。如何在刪除元素時防止對std :: unordered_map進行重新散列?
auto itr = myMap.begin();
while (itr != myMap.end()) {
if (/* removal condition */) {
itr = myMap.erase(itr);
} else {
++itr;
}
}
我想阻止地圖進行任何昂貴的操作,直到我做刪除所有我需要刪除的元素。我有一個有效的關注嗎?我誤解了內部存儲的工作原理嗎?
我知道4年後我們看到了這個問題,但我很高興看到這個答案進入混合。再次查看文檔,很明顯,最糟糕的複雜性不是來自潛在的重新哈希,而是來自哈希碰撞。我認爲這是正確的答案。 – vmrob
所以表只能增長。 –
無序容器中的桶數永遠不會在'erase'下縮小。這個數字可以在'rehash'下縮小,所有的實現都會這樣做。 –