Пытаюсь загрузить двоичное дерево, но постоянно появляется ошибка. Сохраняю вот так
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();
Буду очень благодарен если поможете!)
Придумал немного другой способ сохранения и загрузки
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();
И теперь всё работает как надо. Спасибо всем, кто уже начал решать мой вопрос. Вы лучшие!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей