我正在使用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
擦除元素?
答案 0 :(得分:1)
假设boost::unordered_map::erase
与std::unordered_map::erase
的工作方式相同,则序列:
hash_table_->erase(it);
it++;
调用未定义的行为,因为erase
使it
无效。
您可以执行以下操作:
it = hash_table_->erase(it);
因为erase
返回被删除的迭代器。