LINUX.ORG.RU

Сохранение объектов из контейнера в потоке.


0

0

Здравствуйте ! Есть лабораторка - один из пунктов такой

6) Сохранение объектов из контейнера в потоке. 7) Загрузка объектов из потока в контейнер.

Методические указания: 11) Для сохранения объектов в файле и загрузки их из файла используется потоковый ввод-вывод.

В качестве задания: контейнер map

Тип потокового класса: istrteam-для ввода ostream- для вывода

Вопрос такой: Я знаю как сохранить в файл с помощью классов порождённых от fstream а как в файл сохранить с помощью istream и ostream? (лаба не моя поэтому у препода спросить немогу !)

Шаблон кода
//-----------------------------------------------
#include <fstream>
#include <iostream>
#include <map>

using namespace std;

class my_object
{
  ...
};

operator& <<(ostream& stream,const my_object& obj)
{
   //записываем поля obj
   ...
   return stream;
}

operator& >>(istream& stream,const my_object& obj)
{
   //читаем поля obj
   ...
   return stream;
}

typedef string Key; //string - key
map<Key,my_object> mo;

// Для записи
int main()
{
  mo["a"]=my_object(.....);
  mo["b"]=my_object(.....);
  ...
  ofstream stream("fname.dat");
  map<Key,my_object>::const_iterator i=mo.begin();

  for(;i!=mo.end(); i++){
     stream << i->first << ' ';
     stream << i->second << ' ';
  }
}
// Для чтения
int main()
{
  Key k;
  my_object obj;

  ifstream stream("fname.dat");
  while(stream >> key >> obj){
     mo[key]=obj;
  }
  ...
}

//-----------------------------------------------
Будут вопросы задавай.

kosmonavt
()
Ответ на: комментарий от kosmonavt

Спасибо ! Попробую (а то обещал сделать вчера а времени не было почитать Страуструпа (да и книга у меня дома, а не на работе). Теперь останется объяснить как доказать что это сделали они (да коментариев напихать побольше чтобы не звонили с вопросами, а так всё в порядке)

art_corp
() автор топика
Ответ на: комментарий от kosmonavt

фу... зачем же ето в майне то делать???

template<class K, class O> istream& operator >> (istream&,map<K,O,less<K> >&){...}

template<class K, class O> ostream& operator << (ostream&,map<K,O,less<K> >&){...}


int main(){
...
map<string,my_object,less<string> > m1;
map<int,string,less<int> > m2;
map<pair<float,bool> ,string,... > m3;
....
//пишем
file1<<m1;
file2<<m2;
file3<<m3;
....
//читаем
file1>>m1;
file2>>m2;
file3>>m3;

}

Если введешь сепараратор обозначающий конец записи, то моно всех в один поток писать/читать (если не введешь то писать в один поток можно но читать нельзя:-))

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.