Если вы хотите сэкономить память, не используйте std::map
и std::list
- используйте std::vector
;или еще лучше - не используйте отдельные строки, применяйте дедупликацию и т.д.- и цикл дальнего действия на самом деле основан на итераторах.Таким образом, вы не можете удалить во время цикла.Используйте differences_map.clear()
после цикла.Вы также должны заметить, что удаление отдельных элементов намного дороже по времени, чем очистка всей карты.
Если ваша память настолько ограничена, что вы не можете взять и полную карту, и полный список нав то же время, вы просто используете неправильные структуры данных - поскольку, как я уже сказал, оба они довольно расточительны.Тем не менее, если вы настаиваете, вы можете многократно вставлять *differences_map.begin()
в список, а затем удалять его с карты (и каждый раз снова получать .begin()
после аннулирования итератора).