2014-06-23 2 views
1

먼저이 질문과 관련된 이전에 묻는 모든 질문을 읽었지만 문제를 해결할 수 없었습니다. 나는 하나의 3D지도, 지금은 이런 식으로 가치를 삽입 한 3D지도에서 값 삽입 및 읽기

map<int,map<const char*, const char*>> map3D; 
map<const char*, const char*> submap; 

는 INT의 값의 최대가 5입니다을 가지고 있지만 각각의 int 값에 대한 서브맵 50 key and value있다.

I는 50 개 이상의 값 것이다 TEMP1과 TempB 증가 후 값이 될

submap.insert(std::pair<const char*,const char*>(TempA, TempB)); 
map3D.insert(pair<int,map<const char*,const char*>>(count,submap)); 

카운트 값과 같은 값을 삽입 하였다. 이제 나는 값을 다시 읽고 싶다. 그리고 나는이 질문에서 언급 한 것처럼 이렇게하고있다. How to loop through a C++ map of maps?.

std::map<int,map<const char*,const char*>>::iterator out_it; 
    for(out_it =map3D.begin();out_it != map3D.end();++out_it) 
    { 
     for(std::map<const char*, const char*>::const_iterator in_it=out_it->second.begin();in_it != out_it->second.end(); ++in_it) 
      std::cout << in_it->first << " => " << in_it->second <<endl; 
} 

int는 5이므로 TempA와 TempB의 값은 5 개뿐입니다. 서브맵에서만 반복하는 경우 모든 값을 표시합니다.

for(std::map<const char*, const char*>::const_iterator in_it=submap.begin();in_it != submap.end(); ++in_it) 
       std::cout << in_it->first << " => " << in_it->second <<endl; 

Can 모든 사용자가 모든 값을 읽을 수있는 방법을 안내해줍니다. 감사합니다

답변

1

모든 것이 정확합니다. 당신이 때마다 같은 서브맵을 삽입 코드 때문에 :

submap.insert(std::pair<const char*,const char*>(TempA, TempB)); 
map3D.insert(pair<int,map<const char*,const char*>>(count,submap)); 

당신이이 map3d에 삽입하거나 서브맵 포인터를 사용 제보다 서브맵을 채울 필요가 있으므로, 모든 값을 포함 서브맵이 필요합니다.

map<int,map<const char*, const char*>*> map3D; 
map<const char*, const char*>* submap = new map<const char*, const char*>(); 
... 
submap->insert(std::pair<const char*,const char*>(TempA, TempB)); 
map3D.insert(pair<int,map<const char*,const char*>*>(count,submap)); 

그렇지 않으면 map3D에 삽입 할 때마다 서브맵을 생성해야합니다.

map<const char*, const char*> submap; 
submap.insert(std::pair<const char*,const char*>(TempA, TempB)); 
map3D.insert(pair<int,map<const char*,const char*>>(count,submap));