std::unordered_map<K, V>
的典型布局是什么? K
和V
对象是否存储在存储桶本身中,或者存储桶是否存储指向包含键和值的节点的指针?
我试图找出使用std::unordered_map<K, V>
与std::unordered_map<K, V*>
的性能影响。假设我只是设置和查找值,有没有理由更喜欢后者,即使值非常大?我能想象的唯一原因是,这些值是否存储在桶中,并且每次重新处理容器时都需要重新分配。
标准中是否有任何内容可以保证这种情况不会发生?
答案 0 :(得分:12)
Rehashing使迭代器无效,更改元素之间的顺序, 并更改哪些存储桶元素出现,但不会失效 指针或对元素的引用。
指针和对元素的引用不会因重新散列(或插入/删除,请参阅/ 13)而失效,这意味着它们必须基于节点。
C ++ 17甚至公开节点句柄,以便您可以在两个unordered_map
之间传输节点。