【问题标题】:Sorted data structure fast iteration, insertion, deletion by iterator排序数据结构快速迭代,通过迭代器插入、删除
【发布时间】:2014-10-29 04:51:19
【问题描述】:

我正在寻找具有以下属性的数据结构:

  • 已排序(除非排序迭代不需要这样做)
  • 按排序顺序进行 O(1) 次迭代。
  • 快速插入。我认为 O(lg(n)) 是要走的路。
  • 快速删除using an iterator。我希望至少与插入速度相同。我将永远不必按值删除项目,并且始终可以使用迭代器。此要求意味着插入和迭代永远不会使迭代器失效,除非按值删除的速度与按迭代器删除的速度相同。

其他任何内容都不相关,永远不会被使用。

搜索了一段时间后,我找不到遵循这些属性的数据结构。堆允许快速插入和删除(虽然不是通过迭代器本身),但不容易以所需的方式进行迭代。

我还查看了一个已排序的向量。这具有快速的插入和正确的迭代,但删除非常困难。

我会说这是一个非常常见的数据结构,即使我找不到匹配的结构。此外,我认为删除时我总是有一个迭代器这一事实可能会提高性能。

我希望你能帮助我朝着正确的方向前进。

【问题讨论】:

    标签: c++ data-structures


    【解决方案1】:

    std::setstd::multiset 被指定为 insert() 的对数复杂度,以及通过现有迭代器删除的摊销常数复杂度。

    对集合/多集合的迭代将按排序顺序进行迭代。

    【讨论】:

    • 你的意思是algorithmic complexity的对数复杂度吗?
    • 如果有兴趣,C++ set 通常实现为二叉搜索树,因此数据结构也一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2020-08-14
    • 2011-07-09
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多