我想将 2 个或更多哈希表合并在一起。最终形式是什么并不重要,只要我可以遍历它。这里的最终形式是一个数组。
所以我有一个 unsigned long 作为键,值是一个字符串,整数对。每个键映射到一个 bin,每个 bin 都可以有冲突。我没有将整个哈希表复制到数组中,而是逐个复制它,这样我就不需要遍历整个数组。首先,我将第一个哈希表的第一个 bin 复制到一个 Pairs 数组中,其中字符串和 int 作为其字段(键被忽略)'
就像是
Class Pair{
char* s;
int frequency;
};
要将它添加到数组中,我会有这样的东西......
Pair pair
pair.s=string of the hashtable value
pair.s=integer of the hashtable value
array[index]=pair;
然后将第二个哈希表的第一个bin合并到数组中,我首先检查哈希表的值的字符串是否已经在数组中,如果是我只是更新与字符串对应的类对的int部分在数组中,如果不是,我将其添加到数组中。
然后我继续到下一个 bin..将第一个哈希表的第二个 bin 复制到数组中..然后不是遍历整个数组来检查数组中第二个哈希表的第二个 bin 中的内容,而是开始搜索来自将第二个 bin 的第一个元素插入数组的数组索引。
问题甚至是迭代这种方式仍然很长,因为每个 bin 可以包含 1000 多个 collisons,并且有数千个 bin 要通过。我想避免这种情况。我在想,因为每个键(很长)对于每个字符串都是唯一的,如果它在数组中,则将该键号的偏移量设置为 1,如果不是,则设置为 0。这样,如果它在数组中,我只需要遍历数组。长长的问题太大了。我无法分配具有那么多位的数组...
还有其他方法吗?