从QHash中删除元素范围

时间:2014-09-10 08:56:11

标签: c++ qt qhash erase-remove-idiom

我使用QHash作为容器,我有一项任务是删除所有满足谓词的项目。 起初我想使用Erase-remove idiom,结果发现QHash没有选择删除范围,只有function来通过迭代器删除单个元素。

std :: unordered_map(概念上接近Qt的QHash)有function删除范围。

这意味着一个问题:为什么QHash没有类似的功能以及如何以最佳方式从QHash中删除满足谓词的项目?

1 个答案:

答案 0 :(得分:0)

根据评论,事实证明,擦除删除习惯用法不适用于QHash容器。

因此,给出QHash::erase的描述,特别是它不违反散列中的项目顺序

  

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

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

for( auto it = hash.begin(); it != hash.end(); ++it )
{
    if( pred(*it) )
    {
        hash.erase(it); 
    }
}