2010-04-29 68 views
2

我有一个头文件类中的一个地图:C++:检索映射值和插入第二张图

class One 
{ 
    // code 
    typedef map<string, int> MapStrToInt; 

    inline MapStrToInt& GetDetails(unsigned long index) 
    { 
    return pData[index]; 
    } 

    // populate pData.... 

private: 
    MapStrToInt *pData; 
}; 

和实现另一个地图,并希望从类获得第10个细节一,二类一个人的地图。

class Two 
{ 
    // code 

    One::MapStrToInt pDataTen; 

    int function1() 
    { 
    for (int i =0; i < 10; i ++) 
    { 
     One::MapStrToInt * pMap = &(One::GetDetails(i)); 
     pDataTen.insert(pair<string, int>(pMap->first,pMap->second)); 
    } 
    } 
} 

当我编译此,它指出PMAP:
没有名为“第一”
没有成员名为“第二”

任何建议会员?

谢谢..

+0

您确定自己的代码正确吗?你可以调用'One :: GetDetails'就像它是一个静态函数,但它不是。另外,你的总体目标是什么? – 2010-04-29 11:52:23

回答

4

您正在使用指向您的地图的指针,而不是普通的地图对象。因此,对它们进行索引与对一组地图进行索引相同。 (这实际上可能是你想要的,从您的评论判断。)

然而,firstsecond是你的地图内的元素的成员,而不是地图本身。因此,您应该iterate over the map获取其各个元素,然后将它们插入到第二个地图中。

现在,您是否想要从数组中的第一张地图获取10个元素,或者是否需要从数组中的10个地图获取1个元素,这并不十分清楚。这里是如何做到前者:

One::MapStrToInt& map = One::GetDetails(0); 
MapStrToInt::iterator it = map.begin(); 

for (int i =0; i < 10 && it != map.end(); i++, it++) 
{ 
    pDataTen.insert(*it); 
} 
+0

谢谢, 原始地图中的每个地图都只有1条记录,如字符串和整型。所以我只想从前10个数组元素中获取这两个值,并将它们导入到新地图中... – donalmg 2010-04-29 10:43:08

+0

这没有任何意义。 – 2010-04-29 10:55:00

0

我怀疑你可能希望从One::GetDetails返回pair<string, int>。实际上,One必须有一个映射数组(不是一个映射!),并且此方法返回其中之一。

+0

你在这里是正确的。 该方法应该从地图数组返回1个地图。它应该无法从返回的地图中获得第一和第二个吗? – donalmg 2010-04-29 10:22:42

+0

地图的“第一”或“第二”是什么?地图迭代器有第一个和第二个,而不是地图本身。 – Messa 2010-04-29 10:26:41

+0

那么你想做什么都很不清楚。你想将前10张地图的内容插入到一张地图中吗?这10个地图中的每一个都有一个项目? – UncleBens 2010-04-29 10:43:08

0

首先,这个功能是行不通的:

inline MapStrToInt& GetDetails(unsigned long index) 
{ 
    return pData[index]; 
} 

地图上字符串,而不是整数索引。正确的方法是使用迭代器。这是相当普通的代码:

map <string, int> m; 
... // populate 
map <string, int> :: iterator it = m.begin(); 
for (int i = 0; i < 10; i++) { 
    // do something with it->first and it->second 
    ++it; 
} 
1

pMap是一张地图。你需要定义迭代器来调用第一个,第二个。 您可以调用其他地图API的插入,删除。