首先 - 修复代码
首先也是最重要的:您不能在 STL 容器中存储简单的数组。但是,您可以存储 astd::vector
或指向数组的指针(或普通指针)。
因此,为了能够做任何事情,您需要更改ReferTimes
to 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;
}
}