std::unordered_map<K, V>
的典型布局是什么? ?是K
和 V
对象本身存储在存储桶中,还是存储桶存储指向包含键和值的节点的指针?
我正在尝试弄清楚使用 std::unordered_map<K, V>
对性能的影响与 std::unordered_map<K, V*>
.假设我只放置和查找值,是否有任何理由更喜欢后者,即使值非常大?我能想到的唯一原因是,如果值以内联方式存储在桶中,并且每次重新散列容器时都需要重新分配。
标准中有什么保证不会发生这种情况吗?
最佳答案
Rehashing invalidates iterators, changes ordering between elements, and changes which buckets elements appear in, but does not invalidate pointers or references to elements.
元素的指针和引用不会因重新散列(或插入/删除,参见/13)而失效这一事实几乎意味着它们必须是基于节点的。
C++17 甚至公开了节点句柄,以便您可以在两个 unordered_map
之间传输节点。
关于C++:std::unordered_map 保证是基于节点的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44690986/