从3D地图插入和读取值

时间:2014-06-23 12:49:23

标签: c++ map

首先,我阅读了与此问题相关的所有先前提出的问题,但无法解决我的问题。我有一张3D地图,

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

现在我像这样插入了值,int的最大值是5但是对于每个int值,子映射都有50 key and value

我插入了这样的值

submap.insert(std::pair<const char*,const char*>(TempA, TempB));
map3D.insert(pair<int,map<const char*,const char*>>(count,submap));
在Temp1和TempB值超过50个值后,

计数值将递增。现在我想把它读回来,对于这个我正在按照这个问题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的五个值。如果仅在子图中迭代,则显示所有值

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;

任何人都可以指导我如何阅读所有价值观。感谢

1 个答案:

答案 0 :(得分: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));