1

我刚开始学习 C++,现在正在编写一个能够读取日志文件(例如 Apache)并提供一些信息的简单程序,但我被困在使用地图来存储数据。我正在使用地图的地图,就像这样:

typedef map<string, int[25]> ReferTimes;
map <string, ReferTimes> myMap;

我需要的是访问表int[25](每个 case 用 0 初始化)并根据给定参数的值增加单个 case 的值。每个案例对应一个时间片(第一个案例 = 00 到 01,第二个案例 = 01 到 02 ...倒数第二个案例 = 23 到 24)但最后一个案例,即之前案例的相加(计算一次页面已被点击)。

ReferTimes 字符串对应于用户需要另一个页面的 Internet 页面,即 myMap 的键。

所以:我将用户需要它的每个页面都关联到每个需要的页面,并且我将表关联到它们以了解一个页面被点击的时间和次数。

我的问题是我无法访问这些表来更改它们的值。你能给我一点帮助吗?

我知道它没有很好地解释,但我希望你能帮助我!

4

1 回答 1

1

首先 - 修复代码

首先也是最重要的:您不能在 STL 容器中存储简单的数组。但是,您可以存储 astd::vector指向数组的指针(或普通指针)。

因此,为了能够做任何事情,您需要更改ReferTimesto be:的定义typedef map<string, int(*)[25]> ReferTimes;

然后,当你有你的数组(让我们说int someArray[]={0,1,2,...,24};),并且你希望它在string1->string2->data下时,你就可以了myMap[string1][string2] = &someArray;

示例: 如果您myMap有名为"ele1""ele2""ele3"的元素,并且"ele2"("first",&array1)("second",&array2)("third",&array3) 对组成,为了获取array3的内容并将它们写下来,你会这样做:

for(unsigned int i=0;i<25;i++)
    std::cout << myMap["ele2"]["third"][i];

第二 - 将地图作为一个整体处理

如果您希望能够查看 a 的全部内容map,则需要定义一个iterator. 您可以在C++ 参考页面上阅读有关迭代器的信息。在您的情况下,迭代器myMap是:

map<string, ReferTimes>::iterator myMapIterator;

对于“内部”地图,它是:

ReferTimes::iterator referTimesIterator;

您可以通过执行以下操作查看所有数组:

myMapIterator = myMap.begin();
for(;myMapIterator != myMap.end();myMapIterator++){
   cout << myMapIterator->first << endl;
   referTimesIterator = myMapIterator->second.begin();
   for(;referTimesIterator != myMapIterator->second.end(); referTimesIterator++){
      cout << "\t" << referTimesIterator->first << endl << "\t\t";
      for(unsigned int i=0;i<25;i++)
          cout << (*referTimesIterator->second)[i] << " ";
      cout << endl;
   }
}
于 2013-11-14T00:32:07.877 回答