c++ - QMap/QHash operator[] 返回引用有效性

标签 c++ qt dictionary qmap

我想知道对 Qt 容器内的值的引用,尤其是 QHashQMap 的有效期有多长。我所说的有效是指在插入或删除其他元素后是否保证仍指向映射/哈希内的正确位置。

让我们看下面的代码:

QHash<char,int> dict; // or QMap<char,int> dict;
dict.insert('a', 1);
int& val(dict['a']);

dict.insert('b', 2);

val = 3;             // < will this work or lead to a segfault

在最后一行设置值是否会正确地将与 a 关联的值更新为 3 或者它会导致段错误还是未定义(所以有时工作,其他时候出现段错误,这取决于是否必须在内部重组数据结构,例如调整哈希表数组的大小)。 QMapQHash 的行为是否相同,或者一个有效而另一个无效?

最佳答案

the documentation 中对此进行了全面介绍— 你一定错过了!

Iterators of both types are invalidated when the data in the container is modified or detached from implicitly shared copies due to a call to a non-const member function.

因此,虽然我希望迭代器/引用在您上面描述的场景中在实践中保持有效,但您不应依赖于此。 以这种方式使用它们将调用未定义的行为。

这适用于 QHashIteratorQMutableHashIterator,以及裸引用。谨防声称相反的非权威引用,依赖于可能随时更改的实现细节。

关于c++ - QMap/QHash operator[] 返回引用有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947082/

相关文章:

c++ - 如何自动关闭打开的 vtk 窗口?

regex - 如何限制 QLineEdit 中的表达式

c++ - "launching ' 项目 ' has encountered ..",项目文件不存在

c++ - 添加这些字符串有什么区别?

c++ - 如何链接 TextOut() 函数的库?

c++ - QStringList.indexOf() 没有返回正确的值

python - 使用许多属性和字典查找优化 Python 代码

python - 如何将列表中的相应元素分别添加到python字典键和值中

javascript - 处理 Meteor 和 mongodb 中的嵌套字典

c++ - 有没有办法让 operator= 用于枚举?