在使用容器时,建议使用算法和成员函数进行循环以提高效率。但是,关联容器(unordered_map)不能与erase(remove_if)范例一起使用,看起来常见的方法是回退到循环。
uom是一个std :: unordered_map
for(auto it = uom.begin() ; it!=uom.end(); ){
if(it->second->toErase()) {
delete it->second; // omit delete if using std::unique_ptr
fpc.erase(it++);
}else{
++it;
}
}
//根据Scott Meyers Effective STL pg45
这是否尽可能高效?接缝应该有一个更好的方法来使用像erase(remove_if)范例这样的东西,但这适用于unordered_map(我知道关联容器不能"重新排序"因此不支持remove_if算法)。这真的是使用谓词从unordered_map中删除条目的最佳方法吗?有什么建议吗?
提前谢谢。
答案 0 :(得分:0)
尽可能高效。如果您想要更方便的东西,可以使用boost的erase_if
模板 - 请参阅here。 unordered_map
维护每个存储桶中的节点链接列表,因此擦除它们很便宜。不需要remove-if type
“压缩”,这适合std::vector
使用连续记忆。