2016-07-06 25 views
-4

我有一个这样的载体:如何访问嵌套在一对元素的载体,STL

vector < pair < int, pair < int,int > > > v 

我要访问的所有三个要素。我怎么能通过迭代器来做到这一点? 我宣布迭代器作为IT1和IT2如下:

#include <bits/stdc++.h> 
using namespace std; 
int main() 
{ 

int t; 
scanf("%d",&t); 
while(t--) 
{ 
    vector<pair<int,pair<int,int> > > v; 
    int n,a,b,i; 
    scanf("%d",&n); 
    for(i=0;i<n;i++) 
    { 
     scanf("%d%d",&a,&b); 
     v.push_back(make_pair(b,make_pair(a,i+1))); 
    } 
    sort(v.begin(),v.end()); 
    vector<pair<int,pair<int,int> > > :: iterator it1=v.begin(); 
    vector<pair<int,pair<int,int> > > :: iterator it2=v.begin()+1; 
    printf("%d ",(it1->first)->second); 

     while(it2!=v.end()) 
     { 
      if(it2->first.first>it1.first) 
      { 
       printf("%d ",it2.first.second); 
       it1=it2; 

      } 
      it2++; 
     } 

    } 

    return 0; 
} 
+1

您是否尝试过:'v [指数] .second.first'和'v [指数] .second.second'?还要考虑使用元组(如果您使用的是C++ 11)。 –

+0

你正在混合对象访问操作符'.'和' - >'到处。在某些地方你使用了正确的操作符,而在其他地方则没有。你非常不一致。 –

回答

2

按照类型。

如果it超过

vector<pair<int, pair<int, int>>> 

一个迭代然后*it

pair<int, pair<int, int>> 

所以it->first(又名(*it).first)为int,和it->secondpair<int,int>

这意味着你的元素是

it->first 
it->second.first 
it->second.second 
0

假设你有一个迭代器it你可以这样做:

std::cout << "first int: " << it->first << " first nested int: " << it->second.first << " second nested int: " << it->second.second; 
0
// It may help you !!! 

vector < pair < int , pair < int, int > > > v; 
vector < pair < int , pair < int, int > > > ::iterator it; 

for(int i=1; i<=5; i++) 
{ 
    v.push_back(make_pair(i,make_pair(i+5,i+10))); 
} 

for(it= v.begin(); it!= v.end(); it++) 
{ 
    cout << it->first << " " << it->second.first << " " << it->second.second <<endl; 
} 

// first element access : it->first; 
// second element access : it->second.first; 
// Third element access : it->second.second; 
+0

欢迎使用Stack Overflow,请参阅:https://stackoverflow.com/help/how-to-answer – Daniel

+0

感谢您使用此代码段,它可能会提供一些有限的即时帮助。一个[正确的解释](https://meta.stackexchange.com/q/114762/349538)将通过说明为什么这是一个很好的解决方案,并将使它对未来的读者更有用,将大大提高其长期价值与其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 –