Salve ragazzi vi ringrazzio per il vostro aiuto e ne avrei ancora bisogno, ho ancora un problema sono riuscito a implementarmi l'algoritmo di huffmann(salvo orrori) ma ho ancora un problema, dopo che implemento l'albero come mi creo il mio nuovo file compresso?
Vi posto il codice dell'algoritmo non tralasciando niente errori compresi:
codice:
int main (int argc, char * const argv[]) {
char nomefile[30]; //nome del file
ifstream lettura; //creo un oggetto ifstream(lettura dei dati da un file sequenziale)
map<const char, int > freqMap; //map(chiave,valore)
map<const char, int > ::iterator it;
priority_queue< HuffNode, vector<HuffNode>, greater<HuffNode> > q;//???????
HuffNode *hNode;
char ch;
cout << " Inserisci il nome del File. \n";
cin >> nomefile;
lettura.open(nomefile);
if (lettura.fail()){ //verfica se c'è un errore nell'apertura del file
cout << "Errore nell'apertura del file \n";
exit(1);
}
inStream.get(ch);
while( !inStream.eof()) { //verifica se siamo alla fine del file
it = freqMap.find(ch);
if (it == freqMap.end())
freqMap[ch] = 1;
else
freqMap[ch]++;
inStream.get(ch);
}
int numSym = 0; //Conta il numero di simboli
it = freqMap.begin();
//copia i valore della map nella coda di priorità
while(it != freqMap.end()){
hNode = new HuffNode(it->first, it->second);
q.push(*hNode);
numSym += it->second;
it++;
}
//svuota la map
freqMap.clear();
//mi creo l'albero di huffman
while(q.size>1){
HuffNode *left = new HuffNode( q.top() );
q.pop();
HuffNode *right = new HuffNode( q.top() );
q.pop();
q.push( HuffNode( left, right ) );
}
}
}
HELP ME!