gpt4 book ai didi

c++ - 如何遍历 map ,修改 map 但在每次迭代时恢复?

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:45 24 4
gpt4 key购买 nike

我有一个 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);
}
}
}
}

最佳答案

我认为 std::advance 可能会有帮助。创建温度,然后推进 begin() 直到你现在所在的位置(通过 std::distance 找到)......然后无论你想做什么。

关于c++ - 如何遍历 map ,修改 map 但在每次迭代时恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3552145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com