我只是想知道我是否可以使用“复杂”的地图作为另一张地图的价值。我已经自定义了几个结构如下:
typedef std::vector<std::string> pattern;
typedef std::map<int, std::vector<pattern>> dimPatternsMap;
typedef std::map<int, dimPatternsMap> supportDimMapMap;
好的,让我解释一下这些东西……pattern
是字符串的向量。对于“较小的” map dimPatternsMap
,键是一个整数,它是模式的维度(包含字符串的向量的大小),值是包含模式的向量(它是向量的向量......)。
“更大”的映射supportDimMapMap
也使用整数作为键值,但使用dimPatternsMap
作为它的值。键的意思是“支持计数”。
现在我开始构建这个“复杂”的地图:
supportDimMapMap currReverseMap;
pattern p = getItFromSomePlace(); //I just omit the process I got pattern and its support
int support = getItFromSomePlaceToo();
if(currReverseMap.find(support) == currReverseMap.end()) {
dimPatternsMap newDpm;
std::vector<pattern> newPatterns;
newPatterns.push_back(currPattern);
newDpm[dim] = newPatterns;
currReverseMap[support] = newDpm;
} else{
dimPatternsMap currDpm = currReverseMap[support];
if(currDpm.find(dim) == currDpm.end()) {
std::vector<pattern> currDimPatterns;
currDimPatterns.push_back(currPattern);
currDpm[dim] = currDimPatterns;
} else {
currDpm[dim].push_back(currPattern);
}
}
原谅我的代码真的是一个质量...
但是当我想遍历地图时:
for(supportDimMapMap::iterator iter = currReverseMap.begin(); iter != currReverseMap.end(); ++iter) {
int support = iter->first;
dimPatternsMap dpm = iter->second;
for(dimPatternsMap::iterator ittt = dpm.begin(); ittt != dpm.end(); ++ittt) {
int dim = ittt->first;
std::vector<pattern> patterns = ittt->second;
int s = patterns.size();
}
}
我发现该值s
始终为 1,这意味着对于每个唯一的支持值以及该支持值的每个维度,只有一个模式!但是当我在地图构建过程中调试我的代码时,我确实发现大小不是1 - 我实际上成功地将新模式添加到地图中......但是当涉及到遍历时,所有大小都变为1而我没有不知道为什么...
任何建议或解释将不胜感激!谢谢!!