2016-08-20 2 views
-4

unordered_map도를 통해 나는 2 차원지도를 정의 , 컴파일에 실패했습니다.순회는 2 개 차원 표준 :

for (auto &i : matrix) { 
     for (unordered_map< string, unordered_map<string, Road*>* >::iterator iter1 = i.second->begin(); 
      iter1 != i.second->end(); iter1++) { 

     } 
    } 

내 행렬은 항상에서는 N × N 알고 있기 때문에, 내가 할 수있는 한 가지

for (auto &i : matrix) { 
     for (auto &j : matrix) { 

     } 
    } 

이다 그러나 다양한 크기와 깔끔한 방법이 있는지 궁금 해서요.

+0

두 번째 예는 생각했던대로하지 않습니다. – tkausl

+3

"컴파일하지 못했습니다." 이 상세하고 유용한 문제 성명서를 보내 주셔서 감사합니다 ... –

+0

'auto' 유형은 반복자가 아닙니다. –

답변

1

지도 및 순서가없는지도를 반복하면 키/값 쌍이 생성됩니다. 당신이

for (const auto& p : matrix) 
    ... 

변수 p을 수행 할 때 const std::pair<std::string, std::unordered_map<std::string, Road*>*>&을 입력있다. 따라서, 내부지도를 반복하는, 할 : 당신은 외부 키를 얻을 수 p.first을 사용할 수 있으며, q.first는 내부 키를 얻을 수

for (const auto& p : matrix) 
    for (const auto& q : *p.second) { 
     Road *r = q.second; 
     ... 
    } 

.

1

용기의 크기는 중요하지 않습니다. range-for 루프 (올바르게 사용 된 경우)는 중첩 된 경우에도 모든 크기의 컨테이너에서 작동합니다.