排序后的数据结构通过迭代器快速迭代、插入、删除
Sorted data structure fast iteration, insertion, deletion by iterator
我正在寻找一个具有以下属性的数据结构:
- 已排序(除非排序顺序迭代不需要此操作)
- O(1)迭代
- 快速插入。我认为O(lg(n))是要走的路
- 快速删除
using an iterator
。我希望至少和插入速度一样快。我永远不需要按值删除项,而且迭代器总是可用的。这一要求意味着插入和迭代永远不会使迭代器无效,除非按值删除的速度与按迭代器删除的速度相同
任何其他内容都不相关,永远不会使用。
在四处搜索了一段时间后,我找不到遵循这些属性的数据结构。堆允许快速插入和删除(尽管不是通过迭代器本身),但以所需的方式迭代并不容易。
我还研究了一个排序向量。这有快速的插入和正确的迭代,但删除相当困难。
我想说这是一个非常常见的数据结构,尽管我找不到匹配的结构。此外,我认为我在删除时总是有一个迭代器,这可能会提高性能。
我希望你能帮助我朝着正确的方向前进。
std::set
或std::multiset
被指定为insert()具有对数复杂度,而通过现有迭代器删除具有分摊常数复杂度。
对集合/多集合进行迭代将按排序顺序进行迭代。
相关文章:
- 列表的有效性在插入后开始迭代器
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ 向量插入和迭代器混淆
- 在插入容器之前转换输出迭代器
- 如何将元素插入和迭代到这种映射.C++
- 插入 boost::multi_index 后迭代器变得无效?
- unordered_set范围插入与迭代器
- 如果迭代器没有因插入而无效,则使用std::find和C::insert()是线程安全的
- 使用条件迭代器插入到向量中
- 向量<pointer>:插入(迭代器,指针)插入垃圾值
- 并行STL插入迭代器,例如std :: back_insert_iterator
- unordered_map在结束迭代器上插入
- 重新插入元素可以"re-validate"迭代器吗?
- C 无法在列表上的迭代后使用插入物来附加值
- 插入新元素时结束迭代器会获得更新
- 如何通过迭代通过它插入数组范围
- BST 中的隔离错误迭代插入
- 二进制搜索树递归插入导致堆栈溢出,迭代插入不起作用
- 通过链表迭代插入STL向量值
- c++迭代插入到二叉搜索树BST