【问题标题】:Iterator for a vector<vector<pair<long long,long long> > >向量的迭代器<vector<pair<long long,long long> > >
【发布时间】:2015-09-15 08:22:30
【问题描述】:

我正在使用vector&lt;vector&lt;pair&lt;long long,long long&gt;&gt;&gt; ar; 现在我想使用它的迭代器,当我将它声明为vector&lt;vector&lt;pair&lt;long long,long long&gt; &gt; &gt; :: 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]));
            }
        }
    }
}

【问题讨论】:

  • 在您编写的代码的许多地方都是“>>>”而不是“>>>”,这会导致编译错误。此外,如果您在帖子中添加编译错误,这可能会很有用。
  • arvector&lt;vector&lt;pair&gt;&gt;。那么ar[u]vector&lt;pair&gt;(少一个vectors),ar[u].begin()vector&lt;pair&gt;::iterator
  • 使用一些 typedef 来使这一点更清晰。例如typedef long long BigInt; typedef vector&lt;BigInt&gt; BigVector;
  • 虽然auto 会修复编译器错误,但我想知道这是否真的表示逻辑 错误,因为ar[u] 不是vector&lt;vector&lt;pair&lt;long long,long long&gt;&gt;&gt;,而是只是一个vector&lt;pair&lt;long long,long long&gt;&gt;(正如 AlexYang 指出的那样)。
  • auto 修复了编译错误,但正如 Igor 指出的那样它不起作用,谁能告诉我如何访问真正的向量??

标签: c++ vector stl iterator


【解决方案1】:

一个可能的错误是您将vector&lt;pair&lt;long long, long long&gt; &gt; 分配给vector&lt;vector&lt;pair&lt;long long,long long&gt; &gt; &gt; 迭代器。这将导致编译错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2016-12-14
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多