我有一個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);
}
}
}
}
你的問題不作一大堆的道理。整個前提有點奇怪(你正在修改一堆數據,然後丟棄它),但主要問題是你一直在說「迭代器」,並不清楚你的意思是哪個迭代器。在你的第一個例子中,你當然可以在my_temp_map中使用迭代器來做你想做的事情 - 你在談論其他的迭代器嗎?在第二個例子中,哪些迭代器擔心無效?一些代碼(或僞代碼)在這裏可能會有所幫助。 – 2010-08-23 22:22:09