首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QHash中删除元素范围

从QHash中删除元素范围
EN

Stack Overflow用户
提问于 2014-09-10 08:56:10
回答 2查看 2.6K关注 0票数 2

我使用QHash作为容器,并有一个任务来删除满足谓词的所有项。一开始我想使用擦除成语,结果发现QHash没有删除范围的选项,而只有一个函数通过迭代器删除单个元素。

std::unordered_map (在概念上接近Qt的QHash)具有删除范围的函数

这意味着一个问题:为什么QHash没有类似的函数,以及如何最好地从满足谓词的QHash中删除项?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-10 10:58:18

根据这些注释,结果表明擦除成语不适用于QHash容器。

因此,给定对QHash::的描述,特别是它没有违反散列中项的顺序。

与remove()和causes ()不同,此函数从不导致QHash重新散列其内部数据结构。这意味着可以在迭代时安全地调用它,并且不会影响散列中项的顺序。

我们有以下代码来删除满足谓词的元素:

代码语言:javascript
复制
for( auto it = hash.begin(); it != hash.end(); )
{
    if( pred(*it) )
    {
        it = hash.erase(it); 
    } else {
        ++it;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-01-04 15:24:01

接受的答案不起作用,因为它忽略了擦除()的返回值,而擦除()是哈希中下一个项的迭代器。你需要这样做;

代码语言:javascript
复制
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文档链接--否则就会增加无效的迭代器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25761225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档