我有这样一张 map :
map<prmNode,vector<prmEdge>,prmNodeComparator> nodo2archi;
当我必须更新值( vector )时,我获取键及其值,更新值 vector ,删除旧键和值,然后插入键和新 vector 。代码是这样的:
bool prmPlanner::insert_edgemap(int from,int to) {
prmEdge e;
e.setFrom(from);
e.setTo(to);
map<prmNode,vector<prmEdge> >::iterator it;
for (it=nodo2archi.begin(); it!=nodo2archi.end(); it++){
vector<prmEdge> appo;
prmNode n;
n=(*it).first;
int indice=n.getIndex();
if (indice==f || indice==t){
appo.clear();
vector<prmEdge> incArchi;
incArchi=(*it).second;
appo=(incArchi);
appo.push_back(e);
nodo2archi.erase(it);
nodo2archi.insert(make_pair(n,appo) );
}
}
return true;
}
问题是,对于前 40-50 次迭代,一切都进行得很顺利, map 更新得很好,而随着迭代次数的增加,它有时会出现段错误,有时会出现无限空闲。我不知道为什么。有人可以帮帮我吗?? 非常感谢。
最佳答案
您正在遍历 nodo2archi
,同时通过 nodo2archi.erase(it);
和 nodo2archi.insert(make_pair(n, appo) );
.如果这样做,您的迭代器可能会变得无效,并且您的 it++
可能会崩溃。
关于c++ - 更新 map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191800/