Serialiser une std::map (sans utiliser Boost)

cs_tom24 Messages postés 5 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 4 juin 2009 - 3 juin 2009 à 21:33
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 4 juin 2009 à 20:28
Bonjour,

voila pour un projet, je dois sérialiser en binaire des objets. Mes objets comprennent des string, mais aussi une map<string, string>, et je ne sais pas vraiment comment sérialiser ça...
Sérialiser les vector ca je sais faire, mais ca m'aide pas :/

Pour la sérialisation de tout ce qui n'est pas la map j'ai fait cette fonction :

void Contig::store (fstream &stream) {

  stream.write ((char*)&name, sizeof (string));

  stream.write ((char*)&basecalls, sizeof (string));

  stream.write ((char*)&quality, sizeof (string));

}

Et pour recuperer mes infos sérialiser j'ai fait ceci :

void Contig::retrieve (fstream &stream) {

  stream.read ((char*)&name, sizeof(string));

  stream.read ((char*)&basecalls, sizeof(string));

  stream.read ((char*)&quality, sizeof(string));

}

Pouvez-vous m'aider...Si besoin d'autre précision n'hésitez pas!
Merci!

4 réponses

cs_tom24 Messages postés 5 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 4 juin 2009
4 juin 2009 à 16:27
pour ceux que ca interesse j'ai pu sérialiser mes données comme ceci :

void Contig::store (fstream &stream) {

  mDirPos::iterator it;

  stream.write ((char*)&name, sizeof (string));

  stream.write ((char*)&basecalls, sizeof (string));

  stream.write ((char*)&quality, sizeof (string));

  for (it=directionPosition.begin(); it!=directionPosition.end(); it++) {

    stream.write ((char*)&(it->first), sizeof(string));

    stream.write ((char*)&(it->second), sizeof(string));

  }

}

Ca doit pas etre la meilleure/bonne méthode mais pour l'instant j'ai que ca.
Par contre si quelqu'un veut m'aider pour deserialiser, j'serais pas contre^^

Merci!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juin 2009 à 19:57
A première vue ca m'étonnerait que ca marche vu que sizeof(string) est une constante, et ne dépend pas de la taille de la chaine.

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_tom24 Messages postés 5 Date d'inscription mardi 14 mars 2006 Statut Membre Dernière intervention 4 juin 2009
4 juin 2009 à 20:11
arf oui effectivement ca ne peut pas fonctionner. :/
du coup faut-il que j'utilise par exemple : name.capacity() ? ou tout simplement name.size() ?

Je vois pas quoi utiliser d'autre si ce n'est pas ca.

Merci deja pour ta réponse.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juin 2009 à 20:28
Pour sérialiser une chaine ca me semble pas compliqué : tu écris la taille, puis les données
Pour désérialiser, tu lis la taille (n) et tu lis une chaine de n octets.

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Rejoignez-nous