This question already has an answer here:
C++ stl unordered_map implementation, reference validity
(1个答案)
4年前关闭。
考虑以下:
我已阅读this和this。我有以下问题:
1)提及时,
失效规则,迭代器还是引用? 2)
(假设未删除其在 3)这些答案的区别(如果有)
与
更新:发现another question表示在这种情况下没有无效的风险。
(1个答案)
4年前关闭。
考虑以下:
std::unordered_map<int, std::array<float,50>> foo;
...
auto pointerToArray = foo.at(3).data();
我已阅读this和this。我有以下问题:
pointerToArray
属于哪一类失效规则,迭代器还是引用?
pointerToArray
失效的风险有哪些?(假设未删除其在
foo
中的配对密钥)? unordered_map
和map
之间的问题? 与
vector
不同,array
本身不会重新分配,因此不存在自行更改内存地址的风险,但是由于它位于无序/映射中,因此图变厚。更新:发现another question表示在这种情况下没有无效的风险。
最佳答案
根据您提供的第一个链接提供的信息,除非对 map 进行元素删除,否则pointerToArray
不应通过对 map 进行的任何后续更改使 NOT 无效。 std::array<float, 50>
对象将存储在堆中,并且指向该对象的指针(或可能是引用,具体取决于std::unordered_map
的实现方式)将在映射内随机移动。
关于c++ - 关联容器中std::array data()失效的风险? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38314154/
10-09 21:03