c++ - 调整大小后指向元素值的 unordered_map 指针是否有效?

标签 c++ stl iterator unordered-map

如果我有一个 unordered_map<key, someNiceObject>

(注意 someNiceObject 不是指针)

我有一个 API 可以插入一个新元素,然后返回指向 someNiceObject 的指针现在在 map 上。

如果我在 map 中执行进一步的插入操作,容量可能会发生变化。如果发生这种情况,指针是否仍然有效?

我试着阅读 Basic questions: Pointers to objects in unordered_maps (C++) , std::unordered_map pointers/reference invalidationhttp://eel.is/c++draft/unord.req#9

找不到必要的信息

谢谢大家

编辑:指针似乎是有效的(https://www.thecodingforums.com/threads/do-insert-erase-invalidate-pointers-to-elements-values-of-std-unordered_map.961062/)

虽然会感谢这里有人对 SO 的第二次确认。

最佳答案

根据 cppreference :

If rehashing occurs due to the insertion, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated.

这意味着指针也不会失效。这是可能的,因为 std::unordered_map在概念上可以被认为是 std::vector<std::forward_list<std::pair<Key, Value>>> .自 std::forward_list与任何其他链表一样,单独分配每个元素,对列表的更改不会影响其元素的内存位置。

关于c++ - 调整大小后指向元素值的 unordered_map 指针是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149145/

相关文章:

c++ - 如何使用 C 或 C++ 获取目录中的文件列表?

C++:从映射中删除迭代器,然后递增到下一个迭代器

c++ - STD 指向指针的迭代器;获取应该等效的代码的不同类型?

c++ - 用元素的混合物解析化学式

c++ - 你可以在C++中将全局变量初始化为什么

c++ - 纯虚函数实现

c++ - std::basic_string 完全特化(g++ 冲突)

c++ - STL Containers - vector 、列表和双端队列之间的区别

c++ - C++ 中的迭代器

java - 用 Iterable.forEach 替换 foreach 循环纯粹是为了美观吗?