2013-09-29 5 views
1

У меня есть карта под названием NFA (см ниже)Доступ вектор внутри карты, которая находится внутри другой карты

map<string, NFANode*> nfa; 

NFA заполнен объектами NFANode. (см. ниже)

class NFANode { 
public: 
    string label; 
    map<string,vector<NFANode*> >tr; 
    bool accepting; 
    bool starting; 
    NFANode(string s, bool a, bool x){ 
     accepting = a; 
     label = s; 
     starting = x; 
    } 

}; 

Внутри каждого объекта есть еще один вызов карты tr и внутри tr есть вектор с информацией. Я пытаюсь получить доступ к вектору, чтобы распечатать каждый элемент вектора и не могу понять, как это сделать. Я пытаюсь использовать итератор без везения.

map<string, NFANode*>::iterator nfaIt; 
for (nfaIt = nfa.begin(); nfaIt != nfa.end(); ++nfaIt){ 
    cout << "content of tr are: " << nfaIt->second->tr->second << endl; 

} 

Любая помощь была бы принята с благодарностью.

+1

'nfaIt-> second-> tr' выводит вас на внутреннюю карту' NFANode' в ваш внешний узел на вашей внешней карте. Что вы планируете делать оттуда? сбросить этикетку? Если когда-либо был класс, кричащий о том, что переопределение «ostream» заслоняет это. (и интеллектуальные указатели, но по одному шагу за раз). – WhozCraig

+0

'tr' - это карта, это не итератор – billz

+0

@billz мог позвонить. Я пропустил это. однако комментарий о вставке для потока стоит. Хорошо поймал. – WhozCraig

ответ

0
// iterate the outer map 
map<string, NFANode*>::iterator nfaIt; 
for (nfaIt = nfa.begin(); nfaIt != nfa.end(); ++nfaIt) 
{ 
    // iterate each inner map 
    map<string,vector<NFANode*> >::iterator trIt; 
    for (trIt = nfaIt->second->tr.begin(); trIt != nfaIt->second->tr.end(); ++trIt) 
    { 
     // iterate each vector in the inner map 
     vector<NFANode*>::iterator vecIt; 
     for (vecIt = trIt->second.begin(); vecIt != trIt->second.end(); ++vecIt) 
     { 
      NFANode* pNodeInVecInMapInMap = *vecIt; 
     } 
    } 
} 
+0

Это сработало, спасибо вам большое. Просто для уточнения, вы разыскиваете с помощью '* vecIt'? Я не думал, что вам нужно использовать итераторы с векторами? –

+0

Вам не обязательно, вы можете относиться к нему как к массиву, если хотите - мне просто понравилась симметрия :) –

Смежные вопросы