1

在使用容器时,为了提高效率,建议使用算法和成员函数。但是,关联容器(unordered_map)不适用于擦除(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 有效 STL pg45

这是否尽可能高效?似乎应该有一个更好的方法来使用像擦除(remove_if)范例这样的东西来做到这一点,但它适用于unordered_map(我知道关联容器不能“重新排序”,因此不支持remove_if算法) . 这真的是使用谓词从 unordered_map 中删除条目的最佳方法吗?有什么建议么?

先感谢您。

4

1 回答 1

0

这是尽可能高效的。如果你想要更方便的东西,你可以使用 boost 的erase_if模板——见这里unordered_map在每个桶中维护一个节点的链接列表,因此擦除它们很便宜。不需要remove-if type“压缩”,适合std::vector使用连续内存。

于 2015-04-06T09:35:42.810 回答