hash_map作为键存储了什么?

时间:2010-06-28 09:38:22

标签: c++ data-structures stl hashtable

我有无限的数字流来,我必须检测第一个重复的元素。我想使用哈希表来解决上述问题,即每当一个数字到达时,检查它是否已经存在于哈希表中。如果它有,停止否则将该数字添加到哈希表。现在我的问题是哈希表是存储整数值还是仅存储与这些整数对应的哈希值作为键?

提前致谢

3 个答案:

答案 0 :(得分:0)

hash_map是hashed associative container,意味着它们将键与值相关联。所以是的,你给它的值存储在hash_map中。通常,您无法直接访问哈希码。要使用hash_map解决您的问题,当您获得myInt时,您必须执行myHashMap[myInt] = true;之类的操作。然后对于下一个int,您将必须检查您的int是否已经存储...

您只需要检查它是否在这里,这可能不是最好的选择。一套似乎很合适。您可能必须检查提取操作的性能,但我认为它在STL集中已得到很好的优化。

MY2C

答案 1 :(得分:0)

散列函数用于放置<key,value>对,因此当您插入数字作为键时,它将存储在函数指定的位置,数据与值相关联。

您只需要尝试将该整数作为键并增加其值。

答案 2 :(得分:0)

答案取决于实现约束,但如果数字是int32或更小,我首选的方法是延迟分配512MB(因此只有在你使用它时才会分配单个物理页面,/ dev /的私有mmap零是unix下的传统方法,并将其用作bitset。如果单词大小较小,那么你将不得不求助于某种哈希(可能是多级),k-ary树的变体或上述的某种组合。

请注意多级哈希或

如果您正在查看大于int32的任何内容,则表示您未提供足够的信息来提供建议。如果您无法为您的bitset支付512MB的RAM,则同样适用。