This question already has an answer here:
C++ stl unordered_map implementation, reference validity

(1个答案)


4年前关闭。




考虑以下:
std::unordered_map<int, std::array<float,50>> foo;
...
auto pointerToArray = foo.at(3).data();

我已阅读thisthis。我有以下问题:
  • 1)提及时,pointerToArray属于哪一类
    失效规则,迭代器还是引用?
  • 2)pointerToArray失效的风险有哪些?
    (假设未删除其在foo中的配对密钥)?
  • 3)这些答案的区别(如果有)unordered_mapmap之间的问题?

  • 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