struct foo
{
// foo members
};
bool isEqual(const std::map<int,foo>& map1, const std::map<int,foo>& map2)
{
std::map<int,foo>::const_iterator itr1, itr2;
for (itr1 = map1.begin(), itr2 = map2.begin(); itr1 != map1.end(), itr2 != map2.end(); itr1++, itr2++)
{
if (itr1->first != itr2->first) return false;
if (!isEqual(itr1->second, itr2->second)) return false;
}
return true;
}
bool isEqual(const foo& f1, const foo& f2)
{
// some implementation that checks if f1 and f2 are equal
}
Недостатком этой реализации является то, что она предполагает, что элементы каждой карты расположены в одном и том же порядке (что означает, что они вставлены в одном и том же порядке). Если они могут быть другого порядка, вам нужно сделать что-то подобное для std :: map isEqual:
bool isEqual(const std::map<int,foo>& map1, const std::map<int,foo>& map2)
{
std::map<int,foo>::const_iterator itr, temp;
for (itr = map1.begin(); itr != map1.end(); itr++)
{
temp = map2.find(itr->first);
if (!temp) return false;
if (!isEqual(itr->second, temp->second)) return false;
}
return true;
}
Первая реализация будет быстрее, но опять-таки предполагается, что карта находится в том же порядке.