我将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);
}
}