diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-12-02 17:09:37 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-12-02 17:09:37 +0100 |
| commit | 0a8d737eccc6bfdb6ad7b9aaa1f6fc7c5b84f1eb (patch) | |
| tree | c32eb60e3b4ddfbb62b20a07d7e14be39a2d7e33 | |
| parent | 16e8953dd3244e8822ee492bbccd1bc0e28470fa (diff) | |
| download | tddd86-lab6.tar.gz | |
reference instead of by valuelab6
| -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; } /* |
