如何通过local_iterator擦除boost unordered_map中的元素?

时间:2019-04-21 17:04:13

标签: c++ boost hashtable unordered-map

我正在使用C ++ boost unordered_map哈希表。 我可以使用local_iterator遍历特定存储桶。 现在,我要删除此存储桶中的某些元素。

ShmHashMap::local_iterator it = hash_table_->begin(bucket_idx);
while(it != hash_table_->end(bucket_idx)) {
    if(it->second >= now_time) {
        it++;
        continue;
    }
    hash_table_->erase(it);// this usage is not supported
    // although I can `hash_table_->erase(it->first)`, this usage is inefficient
    it++;
}

那么,有没有办法用local_iterator擦除元素?

1 个答案:

答案 0 :(得分:1)

假设boost::unordered_map::erasestd::unordered_map::erase的工作方式相同,则序列:

hash_table_->erase(it);
it++;

调用未定义的行为,因为erase使it无效。

您可以执行以下操作:

it = hash_table_->erase(it);

因为erase返回被删除的迭代器。