У меня есть std::map<int,int>
Давайте назовем это my_map
Я перебираю эту карту, используя итераторы и цикл for.
В каждой итерации я хочу изменить многие элементы в этой карте, но восстановить ее до первоначальных значений для следующей итерации цикла.
Я думал, что смогу создать временную копию итератора my_temp_map
, но тогда я не смог бы использовать итератор, чтобы найти элемент, над которым я должен работать.
Затем я подумал, что могу создать временную копию, работать с источником my_map
и в конце каждого цикла восстановить исходную копию во временную копию. Однако я считаю, что это сделает недействительными итераторы, поскольку присваивание удаляет все элементы
Как решить эту проблему?
Код добавлен
Таким образом, каждый внутренний цикл будет изменять current_partition (и есть еще некоторый отсутствующий код, в котором будет храниться результат измененного current_partition), но после каждого inner_loop мне нужно, чтобы current_loop был восстановлен до прежнего значения.
std::map<int,int> current_partition = bitset_to_map(centre->second->bit_partitions);
int num_parts = (std::max_element(current_partition.begin(), current_partition.end(),value_comparer))->second;
for (std::map<int,int>::iterator itr = current_partition.begin(); itr != current_partition.end(); ++itr) {
for (int next_part = 0; next_part<num_parts+1; ++next_part) {
if (next_part != itr->second) {
int current_part = itr->second;
itr->second = next_part;
std::vector<int> first_changed_part, last_changed_part;
for (std::map<int,int>::iterator new_itr = current_partition.begin(); new_itr != current_partition.end(); ++new_itr) {
if (new_itr->second == current_part)
first_changed_part.push_back(new_itr->first);
if (new_itr->second == next_part)
last_changed_part.push_back(new_itr->first);
}
}
}
}