Check if map in C++ contains all the keys from another map回答了我的问题,但我不确定我们是如何同时迭代两张地图的。
我知道如何迭代一个如下所示:
typedef std::map<QString, PropertyData> TagData;
TagData original = readFileToMap("FoxHud.bak");
for (TagData::const_iterator tagIterator = original.begin(); tagIterator != original.end(); tagIterator++) {
}
答案 0 :(得分:2)
尝试这种方式:
// As std::map keys are sorted, we can do:
typedef std::map<string, int> TagData;
TagData map1;
TagData map2;
...
TagData::const_iterator map1It = map1.begin();
TagData::const_iterator map2It = map2.begin();
bool ok = true;
std::size_t cnt = 0;
while (map2It != map2.end() && map1It != map1.end()) {
if (map1It->first != map2It->first) {
map1It++;
} else {
map2It++;
cnt++;
}
}
if (cnt != map2.size()) ok = false;
cout << "OK = " << ok << endl;
这也适用于尺寸不同的地图。
答案 1 :(得分:0)
如果您想同时迭代2张地图,可以这样做:
if (map1.size() != map2.size())
; // problem
else
{
for (map<X,Y>::const_iterator it1 = map1.begin(),
it2 = map2.begin();
it1 != map1.end() && it2 != map2.end();
++it1 , ++it2)
{
// ...
}
}
现在,如果你想以不同的“速度”迭代2个地图,那么一个while循环来调整it1和it2的增量将更合适。有关示例,请参阅Golgauth's answer。