发布于 2014-09-10 10:58:18
根据这些注释,结果表明擦除成语不适用于QHash容器。
因此,给定对QHash::的描述,特别是它没有违反散列中项的顺序。
与remove()和causes ()不同,此函数从不导致QHash重新散列其内部数据结构。这意味着可以在迭代时安全地调用它,并且不会影响散列中项的顺序。
我们有以下代码来删除满足谓词的元素:
for( auto it = hash.begin(); it != hash.end(); )
{
if( pred(*it) )
{
it = hash.erase(it);
} else {
++it;
}
}发布于 2022-01-04 15:24:01
接受的答案不起作用,因为它忽略了擦除()的返回值,而擦除()是哈希中下一个项的迭代器。你需要这样做;
QHash<QObject *, int> objectHash;
QHash<QObject *, int>::iterator i = objectHash.begin();
while (i != objectHash.end()) {
if (i.value() == 0) { // test here
i = objectHash.erase(i);
} else {
++i;
}按照Qt文档链接--否则就会增加无效的迭代器。
https://stackoverflow.com/questions/25761225
复制相似问题