我不完全清楚是否unordered_map
允许在执行重新哈希时执行erase()
很明显,在insert()
使所有迭代器和引用无效的过程中可能会发生重新散列:
http://en.cppreference.com/w/cpp/container/unordered_map/insert
但erase()
似乎保留了所有迭代器和引用,除了那些被删除的:
http://en.cppreference.com/w/cpp/container/unordered_map/erase
但是,最后一页和标准表明erase()
最差执行时间是O(size)
. 什么操作可以花费线性时间来完成并且不会以使迭代器无效的方式修改容器?
这篇文章表明迭代器在擦除期间无效:http: //kera.name/articles/2011/06/iterator-invalidation-rules-c0x/
我还在某处读到,未来的提案将允许重新散列erase()
。真的吗?
如果确实发生了重新散列,那么旧的迭代和擦除算法是错误的,对吧?