我无法遍历一个矢量,这是一个地图的值

时间:2015-09-01 20:58:20

标签: c++ dictionary vector

#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时,它什么都没有。没有错误,没有输出。

1 个答案:

答案 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;在主要。

请仔细重命名变量和数据结构,注意范围。