Q:

Сжатие методом Хаффмана

Пытаюсь загрузить двоичное дерево, но постоянно появляется ошибка.
Сохраняю вот так
ofstream otree("tree.bin", ios::binary);
for(map<char, int>::iterator i = mp.begin(); i != mp.end(); i++)
otree.write((char*)&i, sizeof map<char, int>);
otree.close();

где mp -  map<char, int> mp; 
ifstream f("input.txt");
char byte = 0;
while (!f.eof())
{
    byte = f.get();
    mp[byte]++;
}

Загружаю так:
fstream size("tree.bin"); size.seekp(0, std::ios::end);
long size1 = size.tellp(); //длина файла
size.close();

map<char, int>::iterator buf;
ifstream itree("tree.bin", ios::binary);
while (size1 > 0)
{
    itree.read((char*)&buf, sizeof map<char, int>);
    mp[buf->first] = buf->second;
    size1 -= sizeof mp;
}
itree.close();

Буду очень благодарен если поможете!)

A:

Придумал немного другой способ сохранения и загрузки
Save:
ofstream otree("tree.bin", ios::binary);
for (map<char, int>::iterator i = mp.begin(); i != mp.end(); i++)
{
    otree.write((char*)&i->first, sizeof(char));
    otree.write((char*)&i->second, sizeof(int));
}
otree.close();

Load:
char c = 0;
int num = 0;
ifstream itree("tree.bin", ios::binary);
while (!itree.eof())
{
    itree.read((char*)&c, sizeof(char));
    itree.read((char*)&num, sizeof(int));
    mp[c] = num;
}
itree.close();

И теперь всё работает как надо. Спасибо всем, кто уже начал решать мой вопрос. Вы лучшие!

