我在一个头文件类中有一个地图:
class One
{
// code
typedef map<string, int> MapStrToInt;
inline MapStrToInt& GetDetails(unsigned long index)
{
return pData[index];
}
// populate pData....
private:
MapStrToInt *pData;
};
第二个类实现另一个地图,并希望从类One的地图中获取前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:
没有名为'first'的成员
没有名为'second'的成员
有什么建议吗?
谢谢..
答案 0 :(得分:4)
您正在使用指向地图的指针,而不是普通的地图对象。因此,索引它们与索引到映射数组相同。 (根据你的评论,这可能实际上就是你想要的。)
但是,first
和second
是地图中元素的成员,而不是地图本身的成员。所以你应该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);
}
答案 1 :(得分:1)
pMap
是一张地图。你需要定义迭代器来调用第一个,第二个。
您可以调用其他地图API,例如insert,remove。
答案 2 :(得分:0)
我怀疑您可能希望从pair<string, int>
返回One::GetDetails
。实际上,One
必须有一个映射数组(不是一个映射!),并且此方法返回其中一个。
答案 3 :(得分: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;
}