【发布时间】:2012-04-22 21:10:49
【问题描述】:
我正在将一个小 C++ 程序重写为纯 C,这是一个非常简单的程序,它使用 map 计算输入中单词的出现次数。我正在使用静态大小的哈希表(包含大小和指向链接节点列表的指针数组的结构)。我无法将以下部分重写为 C
#if 1 // switch between 1 and 0
# include <tr1/unordered_map>
typedef std::tr1::unordered_map<std::string,int> map_t;
#else
# include <map>
typedef std::map<std::string,int> map_t;
#endif
我主要用哈希函数实现了无序版本,我是这样用的
#if 1 // switch between 1 and 0
int hash_function(const char *key, int size);
#else
#define hash_function(key, size) .......
#endif
但现在我不知道宏应该是什么样子,因为我想要订购表格并且我有表格的静态大小。因为我没有使用地图的经验,所以我不知道是否有任何常规的方式来实现这一点。
我想到了将表格用作二维数组,作为简单矩阵,并从上到下逐列填充。
再说一遍,有没有更好的传统方式来做到这一点?
【问题讨论】:
-
据我所知,您的缺陷是过度思考问题。 Maps 和 unordered_maps 解决了完全不同的问题集,而您正在尝试让无序地图解决(有序)地图问题?
-
std::map 通常使用平衡二叉树(例如红黑树)来实现,这与哈希表完全不同,当然也不使用哈希函数。
-
如果你想让表格有序,你不能使用 unordered_map
-
我忘记了“作业”标签,这是学校作业,所以我必须这样做……当然我不能使用 unordered_map,这就是 0 和 1 之间的切换,如果
-
很可能,您只需要重新阅读要求即可。你误解了任务,并试图做一些完全荒谬(而且不可能)的事情
标签: c++ c map unordered-map