0

在获取地图键方面有些挣扎。我希望这种方法可以修改一个边向量,其中索引是目标节点,该索引处的值是权重。向量“edges”已经初始化大到足以容纳边缘。编译器抱怨它无法将迭代器类型转换为 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
}
4

2 回答 2

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;
  }
}
于 2013-11-02T01:45:14.877 回答
0

您的问题显然在这一行:

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

的键的类型edgesint,但是i->second.begin()返回一个迭代器,因为i->second返回一个映射。我想你需要类似的东西:

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

取决于Graph您想要使用的信息,因为您还没有告诉我们Graph代表什么。

于 2013-11-02T01:52:34.563 回答