Data structures Iterable O(1)插入和随机删除集合

Data structures Iterable O(1)插入和随机删除集合,data-structures,Data Structures,我希望实现我自己的收集类。我想要的特点是: Iterable-顺序并不重要 插入-无论是在末尾还是在迭代器位置,这都无关紧要 随机删除-这是一个棘手的问题。我希望能够引用一段保证在列表中的数据,并在O(1)时间内将其从列表中删除 我计划在容器上只保存自定义类,所以我考虑了一个双链表,它要求组件实现一个简单的接口(或抽象类) 这就是我被卡住的地方。我想知道,仅仅让列表中的项保存对其节点的引用,还是将节点直接构建到它们中,是更好的做法。我觉得两者都相当简单,但我担心将这些节点耦合到一堆类中 我想知道

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

  • Iterable-顺序并不重要
  • 插入-无论是在末尾还是在迭代器位置,这都无关紧要
  • 随机删除-这是一个棘手的问题。我希望能够引用一段保证在列表中的数据,并在O(1)时间内将其从列表中删除 我计划在容器上只保存自定义类,所以我考虑了一个双链表,它要求组件实现一个简单的接口(或抽象类)

    这就是我被卡住的地方。我想知道,仅仅让列表中的项保存对其节点的引用,还是将节点直接构建到它们中,是更好的做法。我觉得两者都相当简单,但我担心将这些节点耦合到一堆类中


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

    < P> >哈希图是很难的。< /P> < P> >哈希图是很难的。

    < P> C++中,这听起来非常适合<代码> STD::unOrdEdEDSET/<代码>(这是
    std::tr1::unordered_set
    boost::unordered_set
    ,如果您使用的是较旧的编译器),它作为哈希集实现,具有您描述的特征

    注意,散列容器实际上提供了两组迭代器,普通迭代器和只经过一个桶的本地迭代器


    许多其他语言也有“哈希集”,当然,java和C++中的

    在C++中,这听起来非常适合 STD::unOrdEdEdTys(即<代码> STD::Tun1EdSeD< < />代码>或<>代码:Boo::.它实现为哈希集,具有您描述的特征

    注意,散列容器实际上提供了两组迭代器,普通迭代器和只经过一个桶的本地迭代器

    许多其他语言也有“哈希集”,当然还有Java和C。 显然,它们可以击败哈希表: 与大多数其他算法不同,尝试具有一个独特的特性,即插入、删除或查找的时间几乎相同,因为每个算法所遵循的代码路径几乎相同。因此,在代码插入、删除和查找的情况下,尝试可以轻松地击败二叉搜索树,甚至hash表,以及更好地用于CPU的指令和分支缓存

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

    请查看。 显然,它们可以击败哈希表: 与大多数其他算法不同,尝试具有一个独特的特性,即插入、删除或查找的时间几乎相同,因为每个算法所遵循的代码路径几乎相同。因此,在代码插入、删除和查找的情况下,尝试可以轻松地击败二叉搜索树,甚至hash表,以及更好地用于CPU的指令和分支缓存



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

    哈希映射是否适合?我认为它们更像一个集合,不允许迭代。@Godric:集合也允许迭代。我想那会简单得多。谢谢。@Godric:您肯定可以迭代它们,但结果的顺序是pretty非常随机。这不是问题。我猜我将不得不为添加和删除的对象使用缓冲区,所以我不会在迭代过程中更改集合?散列图是可编辑的吗?我认为它们更像是一个集合,不允许迭代。@Godric:Sets也允许迭代。我想这样更简单。谢谢。@Godric:You canN肯定迭代它们,但是结果的顺序是非常随机的。这不是问题。我猜想我必须使用缓冲区来添加和删除对象,所以在迭代期间我不改变集合。非常有趣。为什么没有基于TIE的C++标准数据结构?有没有缺点,或者不尝试HAV。e严格的复杂性保证?等等,这看起来只能在尝试中存储可比较对象的字符串。这将如何应用于某些任意类型的常规集合?@Kerrek:我不知道第一个问题,但关于第二个问题:缺点是它们只适合于字符串或类似字符串的数据结构s、 与哈希表不同,我不认为它们适合于所有类型的存储。我正在阅读wikipedia的文章,它们听起来确实很吸引人,但是我想知道如何构造键,因为它们对于我存储的每个对象都必须是唯一的。我想用int或long作为键,而不是字符串,然后扩展到每一个比特。@ Mehrdad。是的,得到了。它是一个有趣的结构,而且也是非常特殊的。节点密钥序列构成了最终的存储值。非常有趣。为什么没有基于TIE的C++标准数据结构?有没有缺点,或者没有尝试有严格的复杂性保证吗?等等,看起来你只能存储字符串。Kerrek:我不知道第一个问题,但关于第二个问题:缺点是它们只适合字符串或类似字符串的数据结构。我不认为它们适合所有类型的存储,不像hashtables。我正在看维基百科的文章,它们听起来确实很吸引人,但我想知道如何构造键,因为它们对于我存储的每个对象都必须是唯一的。我在考虑使用int或long作为键,而不是字符串