Tja! Har en kurs i C++ och algoritmer där vi har fått i uppgift att göra en Huffman-kodning. När vi ska bygga trädstrukturen för att koda tecknen så ska vi använda oss utav en priority_queue.
Min tanke var att lagra HuffmanNoders pekare i denna kö. Såhär ser en HuffmanNod ut.
Den har även en överlagrad < operator.
HuffmanNode::HuffmanNode(int character, int count, HuffmanNode* zero, HuffmanNode* one) {
this->character = character;
this->count = count;
this->zero = zero;
this->one = one;
}
Vi har en frekvenstabell som innehåller tecknet som nyckel och antalet förekomster som värde.
HuffmanNode* buildEncodingTree(const map<int, int> &freqTable) {
priority_queue<HuffmanNode*, vector<HuffmanNode*>, HuffmanNode> prio_que;
for(auto const& element:freqTable){
prio_que.push(new HuffmanNode(element.first,element.second));
}
treeBuilder(prio_que);
return prio_que.top();
}
Denna kodsnutt ger ett fel i STL som säger:
/usr/include/c++/4.8/bits/stl_heap.h:313: error: no match for call to '(HuffmanNode) (HuffmanNode*&, HuffmanNode*&)'
*(__first + (__secondChild - 1))))
^
Hur ska man implementera för att det inte ska bli ett sånt här fel? Är det fel att lagra pekare? Bör jag istället bara lagra Noder?
Mvh
Dalgren