【发布时间】:2012-11-25 01:59:58
【问题描述】:
我将在 C++ 中从头开始实现一个哈希映射作为一个全功能的抽象数据类型。特别是,我将为这个数据容器提供一个迭代器,它能够以识别键的升序遍历所有记录。这部分让我感到困惑,我不知道该怎么做。顺便说一句,通过散列功能,我决定对单向列表使用单独的链接。我想到的一个解决方案是制作另一个列表,该列表将以适当的顺序完全绑定所有元素,该功能将在插入过程本身期间得到保护。但在我看来,它会损害散列本身的许多好处,至少在插入方面;尤其是看看我的ADT的用途,遍历功能会比较少用。长话短说,我应该提供什么样的解决方案?请注意,我不能使用任何专门的库。
注意:
我知道什么是哈希映射,并且它的学术定义本质上是无序的。也许我应该换个说法,我要构建一个混合的、实用的 ADT,它基本上由一个哈希映射加上一些额外的轻量级模块组成,这些模块将提供迭代器功能,以便这样一个 ADT 的用户可以遍历不时按键的升序对记录进行计时。
【问题讨论】:
-
如果遍历不会经常发生,只需按存储顺序复制表并在必要时对其进行排序。
-
如果这是概念证明/学校作业,请参阅下面我的回答。如果这是一个现实问题,您需要重新考虑您的要求,因为它没有多大意义
-
@Hilikus 很高兴听到这听起来很奇怪,当我被告知要实施它时,我的反应也是如此。这确实是一项学校作业。
-
我想不出一种方法可以同时保持结构中的顺序并且保持
inserts 比地图快。 (如果插入不比地图快,那就用地图代替)
标签: c++ iterator hashmap abstract-data-type