努力获得地图密钥。我希望这个方法修改一个边的向量,其中索引是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
}
答案 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
所代表的内容。