#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
struct Edge{
int dest, weight;
};
map<int, vector<Edge> > Edges;
void CreateAdj(int src){
if(!Edges.count(src)){
vector<Edge> temp;
Edges[src] = temp;
}
}
void AddEdge(int src, int dest, int weight){
struct Edge temp;
temp.dest = dest;
temp.weight = weight;
Edges[src].push_back(temp);
}
int main(){
int Edges;
cin >> Edges;
int src, dest, weight;
for(int i = 0; i < Edges; i++){
cin >> src >> dest >> weight;
CreateAdj(src);
CreateAdj(dest);
AddEdge(src, dest, weight);
AddEdge(dest, src, weight);
}
int x;
cin >> x;
for(vector<Edge>::iterator it = Edges[x].begin(); it!=Edges[x].end(); ++it){
cout << it->weight;
}
}
我试图实现Dikjstra的最短路径。对于邻接列表,我创建了一个map,其中int是struct Edge向量的关键,其中Edge包含权重和目标。
我实际上已经从我最初写的内容做了一些改变。我虽然矢量可能根本没有启动,所以我添加了CreateAdj函数,它创建了一个矢量并将其映射到边缘。
但是,我无法迭代Edges的矢量。
目前,大多数变量都是全球性的。错误是:
mainI.cpp:43:60: error: subscripted value is not an array, pointer, or vector
for(vector<Edge>::iterator it = Edges[x].begin(); it!=Edges[x].end(); ++it){
当我将Edges本地化为int时,它什么都没有。没有错误,没有输出。
答案 0 :(得分:3)
int Edges;
cin >> Edges;
for(vector<Edge>::iterator it = Edges[x].begin(); it!=Edges[x].end(); ++it)
&#34;边缘&#34;只是一个整数值(不是任何向量),因此您将无法迭代它。整数&#34;边缘&#34;在main中将覆盖地图&#34; Edges&#34;,这是全局的。
此外,您还没有定义任何Vector&#34; Edge&#34;被称为&#34; Edges&#34;而你正试图(你的意思)迭代地图&#34;边缘&#34; ,这是int&#34; Edges&#34;在主要。
请仔细重命名变量和数据结构,注意范围。