map中嵌套map怎么用?
map<CString,map<long,POI_INFO>* >::iterator itrMap;
map<long,POI_INFO>::iterator itrPoi;
for( int i = 0; i < nMeshCount; ++i )
{
CAdfDataBase *pDataBase = poAtlas->GetAt(i);
if ( NULL == pDataBase )
continue;
CString strMeshPath = poAtlas->GetMeshPathAt(i);
CString strMesh = poAtlas->GetMeshNameAt(i);
map<long,POI_INFO> mapPoi;
long lsize = mapPoi.size();
this->dppSavePOIInfo(pDataBase,mapPoi); //该函数用于往mapPoi中存数据
long ntlsize = mapPoi.size();
m_mapPOI.insert( pair< CString,map<long,POI_INFO>* >(strMesh,&mapPoi) );
itrMap = m_mapPOI.find("H51F021002");
long nSndsize = itrMap->second->size(); //每次都都查找的同一个图幅号,这个size怎么都回变化?
}
出了for循环后再使用:itrMap = m_mapPOI.find("H51F021002");
long nSndsize = itrMap->second->size();
获取到的size为0...这是为什么?求指教
[解决办法]
for (...)
{
map<long,POI_INFO> mapPoi;
...
m_mapPOI.insert( pair< CString,map<long,POI_INFO>* >(strMesh,&mapPoi) );
}
严重错误。 m_mapPOI second 指向的是临时对象,m_mapPOI 活着,而 mapPoi 已经死了
你得保证 mapPoi 在 m_mapPOI 活着的时候也活着
itrMap = m_mapPOI.find("H51F021002");
long nSndsize = itrMap->second->size();
使用迭代器前 先判断
if (itrMap != m_mapPOI.end())
....
你先别急着写代码吧
《c++标准程序库》 你先看看吧