将哈希表合并到数组中

| 我想将2个或多个哈希表合并在一起。最终形式是什么都没有关系,只要我可以迭代它即可。这里的最终形式是一个数组。 所以我有一个无符号的长只要键,值是一个字符串,整数对。每个键都映射到一个垃圾箱,每个垃圾箱可以有collisons。与其将整个哈希表复制到数组中,我不需一遍又一遍地复制它,这样一来,我就不需要遍历整个数组。首先,我将第一个哈希表的第一个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复制到数组中。然后,而不是遍历整个数组以检查第二个hashtable的第二个bin是否在数组中,我开始搜索从第二个bin的第一个元素插入到数组的数组索引开始。 问题甚至在于迭代该方法仍然很漫长,因为每个垃圾箱可以包含1000多个Collisons,并且有成千上万个垃圾箱要经过。我想避免这种情况。我一直在想,因为每个键(很长)对于每个字符串都是唯一的,所以如果要在数组中将该键号的偏移量设置为1,如果不是,则将偏移量设置为0。这样,我只需要遍历数组(如果它在数组中)。问题是很长很长。我无法分配具有这么多位的数组... 还有另一种方法吗?     
已邀请:
从第一个哈希表复制值时,请使用相同的键构建临时哈希表,但这些值是插入每个哈希表的数组索引。然后,当从第二个哈希表复制值时,检查每个键是否在临时表中,如果是,则知道立即更新哪个数组元素(否则只需将新值压在末尾)。 另一种方法将占用更少的空间,但会使您的输入发生变化,该方法是将第二个哈希表复制到第一个哈希表,然后将合并的结果复制到数组中。这自然会合并两个哈希表而没有额外的存储空间,但是如果哈希表将在程序执行中进一步使用,则可能不会太大。     

要回复问题请先登录注册