在多维地图迭代器上键入转换

时间:2013-11-02 01:33:25

标签: c++11 vector iterator stdmap

努力获得地图密钥。我希望这个方法修改一个边的向量,其中索引是dest节点,该索引处的值是权重。矢量“边缘”已经初始化足够大以保持边缘。编译器抱怨它无法将迭代器类型转换为int。如果可能的话,任何人对如何处理这种转换都有任何建议或想法?谢谢。这是我正在努力实现Dijkstra的MOOC最短路径的任务的一部分。

void CompleteGraph::GetNodeEdges(int Node, std::vector<int> &edges){
    // Modifies a vector of edges given the source node sorted by edge weight

    // Iterate over a map. Grab all edges that have the given start node(map's 1st key)
    typedef std::map<int, std::map<int, int> >::iterator iter;
    for(iter i = Graph.begin(); i != Graph.end(); i++){
        if (i->first == Node){
            edges[i->second.begin()] =  i->second.end();
        }
    }

    // Sort vector here: will do this next
}

2 个答案:

答案 0 :(得分:0)

我怀疑你正在寻找这样的东西:

iter i = Graph.find(Node);
if (i != Graph.end()) {
  map<int, int>& edges_map = i->second;
  for (map<int, int>::iterator m = edges_map.begin();
       m != edges_map.end(); ++m) {
    if (edges.size() <= m->first) {
      edges.resize(m->first + 1);
    }
    edges[m->first] = m->second;
  }
}

答案 1 :(得分:0)

你的问题显然在这一行:

edges[i->second.begin()] =  i->second.end();

edges的密钥类型为int,但i->second.begin()正在返回迭代器,因为i->second会返回一个地图。我猜你需要这样的东西:

edges[i->second.begin()->first] =  i->second.end();

取决于您要使用的Graph中的哪些信息,因为您尚未告诉我们Graph所代表的内容。