迭代对的向量

Pee*_*ush 3 c++ iterator stl vector const-iterator

我写了下面的代码片段,但它似乎没有工作.

int main(){
    int VCount, v1, v2;
    pair<float, pair<int,int> > edge;
    vector< pair<float, pair<int,int> > > edges;
    float w;
    cin >> VCount;
    while( cin >> v1 ){
        cin >> v2 >> w;
        edge.first = w;
        edge.second.first = v1;
        edge.second.second = v2;
        edges.push_back(edge);
    }
    sort(edges.begin(), edges.end());
    for ( vector < pair<float,pair<int,int>> >::const_iterator it = edges.begin() ; itt != edges.end; it++){
        cout >> it.first;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在包含for循环的行中抛出错误.错误是:

error: no match for ‘operator<’ in ‘it < edges.std::vector<_Tp, _Alloc>::end [with _Tp = std::pair<float, std::pair<int, int> >, _Alloc = std::allocator<std::pair<float, std::pair<int, int> > >, std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::pair<float, std::pair<int, int> >*, std::vector<std::pair<float, std::pair<int, int> > > >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::const_pointer = const std::pair<float, std::pair<int, int> >*]
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

J'e*_*J'e 17

C++14 迭代器要简单得多

for (const auto& pair : edges)
{
    std::cout << pair.first;
}
Run Code Online (Sandbox Code Playgroud)

C++17 迭代器允许更深入的访问

for (const auto& [first, sec] : edges)
{
    std::cout << first;
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*cow 10

循环中至少有三个错误.

for ( vector < pair<float,pair<int,int>> >::const_iterator it = edges.begin() ; itt != edges.end; it++){
        cout >> it.first;
    }
Run Code Online (Sandbox Code Playgroud)

首先,你必须使用edges.end()而不是edges.end.身体内部必须有

    cout << it->first;
Run Code Online (Sandbox Code Playgroud)

代替

    cout >> it.first;
Run Code Online (Sandbox Code Playgroud)

要逃避这些错误,你可以简单地写一下

for ( const pair<float, pair<int,int> > &edge : edges )
{
   std::cout << edge.first;
}
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`for ( const auto&amp; edge : edge )` (2认同)