В MFC я считаю, что проще всего сначала сериализовать размер карты, а затем просто выполнить итерацию по всем элементам.
Вы не указали, используете ли вы std::map
или MFC CMap
, но версия, основанная на std::map
, может выглядеть следующим образом:
void MyClass::Serialize(CArchive& archive)
{
CObject::Serialize(archive);
if (archive.IsStoring()) {
archive << m_map.size(); // save element count
std::map<int, MapData>::const_iterator iter = m_map.begin(),
iterEnd = m_map.end();
for (; iter != iterEnd; iter++) {
archive << iter->first << iter->second;
}
}
else {
m_map.clear();
size_t mapSize = 0;
archive >> mapSize; // read element count
for (size_t i = 0; i < mapSize; ++i) {
int key;
MapData value;
archive >> key;
archive >> value;
m_map[key] = value;
}
}
}
Если при чтении архива возникает ошибка, одна из потоковых операций должна вызвать исключение, которое затем будет перехвачено платформой на более высоком уровне.