c++ - 更新 map 值

标签 c++

我有这样一张 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/

相关文章:

c++ - 结构/类声明中的作用域使用指令?

c++ - 利用否则浪费的填充空间

c++ - 加速 C++ : Undefined symbols for architecture x86_64

c++ - 使用 "typename Container::value_type"作为返回值时无法推断模板参数

C++ 转换日期格式

c++ - 有没有办法在 C++ 中使用 operator+ 连接 std::strings?

c++ - 如何在 C++ 的头文件中定义字符串数组并设置其值?

c++ - 尝试使用静态 ifstream 成员和随附函数时,出现链接器错误

c++ - 在动态增长范围内找到中位数的最快方法

c++ - 我们如何使用下面的集合构造函数示例构造集合元素?