Serialiser une std::map (sans utiliser Boost)

Signaler
Messages postés
5
Date d'inscription
mardi 14 mars 2006
Statut
Membre
Dernière intervention
4 juin 2009
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
5
Date d'inscription
mardi 14 mars 2006
Statut
Membre
Dernière intervention
4 juin 2009

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!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
5
Date d'inscription
mardi 14 mars 2006
Statut
Membre
Dernière intervention
4 juin 2009

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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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