将哈希表合并到数组中
merging hashtables into an array
我想将 2 个或更多哈希表合并在一起。最终形式是什么并不重要,只要我能遍历它。 这里的最终形式是一个数组。
所以我有一个无符号的长作为键,值是一个字符串,int 对。 每个键映射到一个箱子,每个箱子都可以有列子。我不是将整个哈希表复制到数组中,而是逐个 bin 复制它,这样我就不需要遍历整个数组。首先,我将第一个哈希表的第一个 bin 复制到一个 Pair 数组中,字符串和 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 部分,如果不是,我将其添加到数组中。
然后我继续下一个垃圾箱。将第一个哈希表的第二个箱复制到数组中。然后,我不是遍历整个数组来检查第二个哈希表的第二个箱中的某些内容是否在数组中,而是从将第二个箱的第一个元素插入数组的数组索引开始搜索。
问题在于,即使以这种方式迭代仍然相当冗长,因为每个垃圾箱可以包含 1000+ 个 collisons,并且有数千个垃圾箱需要通过。我想避免这种情况。我在想,因为每个键(很长)对于每个字符串都是唯一的,如果它在数组中,则将该键号的偏移量设置为 1,如果它不在数组中,则将 0 设置为。这样,我只需要遍历数组(如果它在数组中)。问题在于,长篇实在是太大了。我无法分配具有这么多位的数组...
还有别的办法吗?
从第一个哈希表中复制值时,使用相同的键构建一个临时哈希表,但这些值是插入每个键的数组索引。 然后,从第二个哈希表复制值时,检查每个键是否在临时表中,如果是,您就知道要立即更新哪个数组元素(否则您只需将新值推到末尾)。
另一种方法,会占用更少的空间,但会改变你的输入,是将第二个哈希表复制到第一个哈希表上,然后将该组合结果复制到数组中。 这自然会合并两个哈希表,没有额外的存储空间,但如果哈希表将在程序执行中进一步使用,则可能不会那么好。
- 合并排序不排序自创建数组类 c++
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 我如何根据 c++ 中的行合并两个 2D 数组
- 使用基于数组的列表 c++ 合并 2 个数组
- 如何在 char 数组中合并两个数组以通过网络发送
- 合并数组的程序打印 0 而不是实际合并的数组
- 如果数组长度为 100000,则使用合并排序对反转进行计数会给出负数
- 合并两个数组后数组大小不正确
- 如何修复合并两个C++数组时'Invalid Pointer'
- 在OpenMP上的并行合并排序上的数组大小问题.如何将合并分类分类为更多任务
- C++全局常量数组:是否保证合并(优化)到一个副本中
- C - 为什么合并函数在递归调用后会逆转数组
- 合并排序 - 返回新数组,而不是将合并的数组复制到输入数组
- C MPI:STD ::在数组上合并
- 合并排序问题,在方法之间传递数组
- C 合并的数组输出错误
- 我如何在INT数组上实现合并排序
- C++将2个已排序的数组合并为1个已排序数组
- 将排序代码与数组合并,陷入合并,只需要一点点修正
- 将字符* 数组合并到uint16_t