我将QHash用作容器,并且有一个任务要删除所有满足谓词的项目。
最初,我以为使用Erase-remove idiom会导致QHash无法删除范围,而只能通过function通过迭代器删除单个元素。

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

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

最佳答案

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

因此,给出QHash::erase的描述,尤其是它不违反哈希中各项的顺序


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


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

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

09-08 09:24