我正在编写需要处理任意二进制文件的霍夫曼压缩器和解压缩器(在C ++中)。我需要一些数据结构建议。现在,我的压缩过程如下:
这是我到目前为止的地方。
我的问题是,如果我只使用从char *到int的映射,我到底在测量什么。如果我是对的,这实际上并不是我需要的。我认为我真正在做的是使用char *来跟踪实际的4字节指针值。
所以,我打算做的是使用直方图的映射和叶节点上存储的数据的char。我的逻辑声音在这里吗?我的推理告诉我是的,但由于这是我第一次处理二进制数据,我要小心那些只会以奇怪的方式出现的陷阱。
感谢。
答案 0 :(得分:3)
你不需要地图;只有256个可能的值。只需拥有int freq[256] = {0}
,并为输入中的每个字节添加freq[data[idx]]++
。
如果您真的想要地图,请使用map<unsigned char, int>
;您对使用char*
地图的怀疑是正确的。