【发布时间】:2015-09-15 08:22:30
【问题描述】:
我正在使用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]));
}
}
}
}
【问题讨论】:
-
在您编写的代码的许多地方都是“>>>”而不是“>>>”,这会导致编译错误。此外,如果您在帖子中添加编译错误,这可能会很有用。
-
ar是vector<vector<pair>>。那么ar[u]是vector<pair>(少一个vectors),ar[u].begin()是vector<pair>::iterator。 -
使用一些 typedef 来使这一点更清晰。例如
typedef long long BigInt; typedef vector<BigInt> BigVector; -
虽然
auto会修复编译器错误,但我想知道这是否真的表示逻辑 错误,因为ar[u]不是vector<vector<pair<long long,long long>>>,而是只是一个vector<pair<long long,long long>>(正如 AlexYang 指出的那样)。 -
auto 修复了编译错误,但正如 Igor 指出的那样它不起作用,谁能告诉我如何访问真正的向量??