Ik ben voor school bezig aan een opdracht voor c++. Het is de bedoeling dat de huffman encoding geïmplementeerd wordt. Nu ben ik bezig met de HuffmanTree klasse die er als volgt uit ziet:
Nu gaat er iets niet het helemaal lekker met de priority queue. Het lijkt wel of er niet ge-popt wordt. Voor het aantal nodes dat in de queue zit, krijg ik alleen het char van de laatste node te zien. Heeft iemand een idee hoe dit komt? Sorry als het een echte beginners vraag is, maar het is mijn eerste programma in c++.
Aanvulling:
Een node met de juiste waardes gaat er wel in, maar als ik de volgende code toevoeg in de while loop:
Node node = pq.top();
char c = node.GetChar();
blijft c de hele tijd y als ik na deze code een breakpoint neerzet.
Ik vraag btw niet om code. Ik vraag om een hint.
C++: HuffmanTree.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| #include <iostream.h> #include <vector.h> #include <stack.h> #include <queue.h> #include "HuffmanTree.h" #include "Node.h" Node _rootNode; priority_queue<Node> pq; HuffmanTree::HuffmanTree(){ } bool operator<(Node a, Node b) { return a.GetOccurence() < b.GetOccurence(); } void HuffmanTree::CreateHuffmanTree(int *charOccurrence, int charsInEncoding) { for(int i = 0; i < charsInEncoding; i++) { if(charOccurrence[i]) { Node node((char)i, charOccurrence[i]); pq.push(node); } } //Test of het goed gaat. while(!pq.empty()) { cout << "peek read: " << pq.top().GetChar() << endl; pq.pop(); } } HuffmanTree::~HuffmanTree() { } |
C++: Node.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #include <iostream.h> #include "Node.h" char _c; int _occurrence; Node::Node() { } Node::Node(char c, int occurrence) { _c = c; _occurrence = occurrence; } char Node::GetChar() const { return _c; } int Node::GetOccurence() const { //cout << "node occurence: " << _occurrence << endl; return _occurrence; } Node::~Node() { } |
Nu gaat er iets niet het helemaal lekker met de priority queue. Het lijkt wel of er niet ge-popt wordt. Voor het aantal nodes dat in de queue zit, krijg ik alleen het char van de laatste node te zien. Heeft iemand een idee hoe dit komt? Sorry als het een echte beginners vraag is, maar het is mijn eerste programma in c++.
Aanvulling:
Een node met de juiste waardes gaat er wel in, maar als ik de volgende code toevoeg in de while loop:
Node node = pq.top();
char c = node.GetChar();
blijft c de hele tijd y als ik na deze code een breakpoint neerzet.
Ik vraag btw niet om code. Ik vraag om een hint.
[ Voor 7% gewijzigd door Verwijderd op 17-02-2010 16:44 ]