我正在寻找具有以下属性的数据结构:
using an iterator
。我希望至少与插入速度相同。我永远不会按值删除项目,并且始终可以使用迭代器。这个要求意味着插入和迭代永远不会使迭代器失效,除非按迭代器的删除速度以与删除相同的速度发生。其他任何内容都不相关,永远不会被使用。
在搜索了一段时间之后,我无法找到遵循这些属性的数据结构。堆允许快速插入和删除(虽然不是迭代器本身),但不容易以所需的方式迭代。
我还看了一个有序的矢量。这有快速插入和正确的迭代,但删除非常困难。
我会说这是一个非常常见的数据结构,即使我找不到匹配的结构。此外,我认为删除时总是有一个迭代器这一事实可能会提高性能。
我希望你能帮助我朝着正确的方向前进。
答案 0 :(得分:4)
std::set
或std::multiset
具有insert()的对数复杂度,并通过现有迭代器指定用于删除的常量复杂度。
迭代set / multiset将按排序顺序迭代。