【发布时间】:2020-04-10 08:57:18
【问题描述】:
这里 i 是一个指针,所以我也可以递增和递减,但是如果我按照代码中提到的那样进行减法操作,它就不起作用
for(auto i = soldier.begin();i!=soldier.end();i++){
int temp1 = i->first;
int temp2 = i->second;
i->first = (i-temp2)->first;
i->second = (i-temp2)->second;
(i-temp2)->first = temp1;
(i-temp2)->second = temp2;
}
【问题讨论】:
-
你不能做
i->first = (i-temp2)->first;,你不能在迭代过程中改变map的键 -
那么有没有其他办法呢
-
我不太明白地图中的“交换”是什么意思,你想交换什么?在
map中,访问是通过键完成的,您不应该将其与索引一起使用。 -
另外,地图值类型是
std::pair<const Key, T>。因为Key是const,所以你不应该修改它。 -
更准确地说:
std::map将键与值关联,交换键 和 值是完全没有用的。例如:key1=>value1 和 key2=>value2,然后你交换两者,最终得到 exact same 关联。这听起来像XY-problem