2015-06-29 52 views
0

我使用vector<vector<pair<long long,long long>>> ar; 现在我想使用它的迭代器,并当我声明为vector<vector<pair<long long,long long> > > :: iterator i; 其表示编译错误,是否有任何其他方法来定义这个迭代器? 我的代码是迭代用于向量<矢量<对<长长,长长>>>

#include<bits/stdc++.h> 
using namespace std; 

void dijkstra(vector<vector<pair<long long,long long>>> &ar,long long a,vector<long long> &distance){ 
    set<pair<long long,long long>> br; 
    br.insert(make_pair(a,0)); 
    distance[a]=0; 
    while(!br.empty()){ 
     set<pair<long long,long long>> :: iterator z=br.begin(); 
     long long u=z->first; 
     br.erase(z); 
     for(vector<vector<pair<long long,long long> > > :: iterator i=ar[u].begin();i<ar[u].end();i++){ 
      long long v=i->first; 
      long long wt=i->second; 
      if(distance[v]>distance[u]+wt){ 
       if(distance[v]!=100000000){ 
        br.erase(br.find(pair<long long,long long>(v,distance[v]))); 
       } 
       distance[v]=distance[u]+wt; 
       br.insert(pair<int,int>(v,distance[v])); 
      } 
     } 
    } 
} 
+4

也许使用'auto'? –

+0

在代码的很多地方,你写了“>>>”而不是“>>>”,导致编译错误。此外,如果您在帖子中添加编译错误,它可能很有用。 –

+0

'ar'是'vector >'。然后'ar [u]'是一个'vector '(少一个'vector's),'ar [u] .begin()'是'vector :: iterator'。 –

回答

0

一个可能的错误可能是您分配了vector<pair<long long, long long> >vector<vector<pair<long long,long long> > >迭代器。这将会导致编译错误。

相关问题