Question

J'écris un compresseur et décompresseur huffman (en C ++) qui a besoin de travailler sur des fichiers binaires arbitraires. Il me faut un peu de conseils de structure de données. En ce moment, mon processus de compression est la suivante:

  • Lire les octets du fichier sous forme binaire à un tampon char *
  • Utiliser un std :: carte pour compter les fréquences de chaque motif d'octets dans le fichier. (C'est là que je crois que je avoir des ennuis.)
  • Construire l'arbre binaire en fonction de l'histogramme de fréquence. Chaque noeud interne a la somme des fréquences de ses enfants et chaque noeud de feuille a un char * pour représenter l'octet réel.

est où je suis à ce jour.

Ma question est exactement ce que je mesure si je viens d'utiliser une carte de char * en int. Si je ne me trompe pas, ce n'est pas en fait ce que je dois. Ce que je pense que je suis vraiment faire est le suivi des valeurs de pointeur de 4 octets réels en utilisant char *.

Alors, ce que je prévois de faire est d'utiliser une carte pour l'histogramme et char pour les données stockées au niveau des noeuds de feuilles. Mon son logique ici? Mon raisonnement me dit oui, mais puisque c'est la première fois le traitement des données binaires, je voudrais faire attention les pièges qui n'apparaissent de façon étrange.

Merci.

Était-ce utile?

La solution

Vous n'avez pas besoin une carte; il n'y a que 256 valeurs possibles. Juste int freq[256] = {0} et ajouter avec freq[data[idx]]++ pour chaque octet dans l'entrée.

Si vous voulez vraiment une carte, l'utilisation map<unsigned char, int>; vos soupçons sur l'utilisation de la carte de char* est correcte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top