Visual Studio(2015)的实现不会使任何迭代器无效({rehash()
对内部std::list
进行重新排序,使所有迭代器保持有效)。
是否存在其他使迭代器无效的实现(即使具有相同的复杂性也可以获得更好的性能)?
在std::unordered_map::rehash()
上使迭代器无效有时会限制开发人员(例如,我试图仅使用std::unordered_map
实现LRU缓存:节点的值具有容器的迭代器)。但是使迭代器无效的可能性是否可以更好地实现std::unordered_map::rehash()
?
答案 0 :(得分:0)
感谢@DanielLangr进行以上讨论,
我认为,此要求附带std::unordered_map::[const_]iterator
定义为LegacyForwardIterator
(而不是LegacyBidirectionalIterator
)。并且如果不使std::forward_list
中的迭代器无效(可能是{{1}除外),就不可能使用内部std::list
或类似的方法(而不是VS'rehash()
)来实现具有更好的内存占用的实现。 / p>
end()
,但是定义{{ 1}}的要求,并将所有这些注意事项留给实施者。