удаление некоторых элементов из map - как это работает?
От: maslukov  
Дата: 06.10.04 06:46
Оценка:
Здравствуйте!

В форуме не раз поднимался вопрос — как удалить из std::map некоторые эелементы удовлетворяющие некотрому условию.
_Внимательно изучив старые ветки_, я все таки не до конца проявнил ситуацию. В связи с этим хочу задать пару вопросов

1. при удалении из Map ( а как известно Map это сортированное дерево ) Map перестраиваеться и простой проход по циклу может никогда не закончиться


// Инициализацяи и лишние опрелделения пропущены
// этот код неверен
it = m_map.begin();
while(it != m_map.end)
{
  if(условие)// проверка условия 
  {
    //- удаление по ключю - MAP перестраиваеться следовательно it может не достигнуть m_map.end()
    map.erase(it->first)
  }
  it++;
}


2. Можно конечно использовать алгоритм erase и предикат удаления — но я все равно не понимаю как ЭТО работает.
Ведь очевидно , для того чтобы корректно удалить из map несколько элементов — необходимо сначала собрать все ключи элементов подлежащих удалению в отдельный список, а затем удалить их.



// Инициализацяи и лишние опрелделения пропущены

it = m_map.begin();
while(it != m_map.end)
{
  if(условие)
    list.push_back(it->first)  // запоминаем ключи элементов подлежащих удалению

  it++;
}

// теперь удаляем
it = list.begin();
while(it!=list.end() )
{
  m_map.erase(*it);
}


Т.е. иначе, как в два прохода это не сделать...я правильно понимаю
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.