Iterable O(1)insert和random delete collection

时间:2011-08-18 00:52:55

标签: data-structures

我希望实现自己的集合类。我想要的特点是:

  1. Iterable - 订单并不重要
  2. 插入 - 无论是在结尾还是在迭代器位置,都没关系
  3. 随机删除 - 这是一个棘手的问题。我希望能够引用一个保证在列表中的数据,并在O(1)时间内将其从列表中删除。
  4. 我计划只容纳自定义类的容器,所以我在想一个双链表,要求组件实现一个简单的接口(或抽象类)。

    这是我陷入困境的地方。我想知道是否更好的做法是让列表中的项目包含对其节点的引用,或者将节点直接构建到它们中。我觉得两者都相当简单,但我担心将这些节点耦合到一堆类中。

    我想知道是否有人知道如何最小化耦合,或者可能知道具有我想要的特征的另一个数据结构。

3 个答案:

答案 0 :(得分:3)

很难打败哈希地图。

答案 1 :(得分:2)

看看tries

显然他们可以击败哈希表:

  

与大多数其他算法不同,尝试具有一个特殊的特征,即插入,删除或查找的时间几乎相同,因为每个算法遵循的代码路径几乎相同。因此,对于代码插入,删除和查找等同的情况,尝试可以轻松地击败二进制搜索树甚至哈希表,以及更好地用于CPU的指令和分支缓存。 / p>

它可能适合您的使用,也可能不适合您的使用,但如果确实如此,它可能是最好的选择之一。

答案 2 :(得分:1)

在C ++中,这听起来非常适合std::unordered_set(如果你有一个较旧的编译器,那就是std::tr1::unordered_setboost::unordered_set。它被实现为哈希集,具有您描述的特征。

这是interface documentation。请注意,哈希容器实际上提供了两个迭代器集合,通常的迭代器集合和本地集合只能通过一个存储桶。

许多其他语言也有“哈希集”,当然还有Java和C#。