diff options
Diffstat (limited to 'labb6')
| -rwxr-xr-x | labb6/src/encoding.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/labb6/src/encoding.cpp b/labb6/src/encoding.cpp index 81e8fe1..6d46fa4 100755 --- a/labb6/src/encoding.cpp +++ b/labb6/src/encoding.cpp @@ -49,36 +49,32 @@ HuffmanNode* buildEncodingTree(const map<int, int>& freq_table) { return root; } -/* - * Merge 'from' into 'to', overwriting if a key already exists. - */ -template <typename T, typename U> -void merge_map(map<T, U>& into, const map<T, U>& from) { - for (const auto& element : from) { - into[element.first] = element.second; - } -} - -map<int, string> encoding_map_helper(HuffmanNode *encoding_tree, const string& cur_string) { - map<int, string> encoding_map; +void encoding_map_helper( + map<int, string>& encoding_map, + HuffmanNode *encoding_tree, + const string& cur_string +) { if (encoding_tree) { if (encoding_tree->isLeaf()) { encoding_map[encoding_tree->character] = cur_string; } else { - encoding_map = encoding_map_helper(encoding_tree->zero, - cur_string + "0"); - merge_map(encoding_map, encoding_map_helper(encoding_tree->one, - cur_string + "1")); + encoding_map_helper(encoding_map, + encoding_tree->zero, + cur_string + "0"); + encoding_map_helper(encoding_map, + encoding_tree->one, + cur_string + "1"); } } - return encoding_map; } /* * Build a Huffman encoding map (char -> bit-string) from a Huffman tree. */ map<int, string> buildEncodingMap(HuffmanNode* encoding_tree) { - return encoding_map_helper(encoding_tree, ""); + map<int, string> encoding_map; + encoding_map_helper(encoding_map, encoding_tree, ""); + return encoding_map; } /* |
