C ++:检索地图值并插入第二个地图

时间:2010-04-29 10:16:53

标签: c++

我在一个头文件类中有一个地图:

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'的成员

有什么建议吗?

谢谢..

4 个答案:

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

答案 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;
}