Как удалить элемент в boost unordered_map с помощью local_iterator?

#c #boost #hashtable #unordered-map

#c #boost #хеш-таблица #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:

Предполагая, что boost::unordered_map::erase это работает так же, как std::unordered_map::erase , тогда последовательность:

 hash_table_->erase(it);
it  ;
  

вызывает неопределенное поведение, поскольку erase делает недействительным it .

Однако вы можете сделать:

 it = hash_table_->erase(it);
  

потому erase что возвращает итератор, следующий за удаленным.