2016-07-06 57 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)將通過說明爲什麼這是一個很好的解決方案,並將使它對未來的讀者更有用,將大大提高其長期價值與其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 –