我正在寻找一种数据结构来保存唯一元素的无序集合,它将支持以下操作
- 在集合中的任何位置插入/删除元素
- 查询元素是否存在
- 访问随机元素
天真地,1 和 2 建议使用关联容器,例如unordered_set
,但是 3 在元素数量上是线性的。使用随机访问容器,例如vector
,使 3 变得容易,1 可以在 O(1) 中完成,但是 2 又是 O(N)。
问题是是否有一种已知的方法可以解决这种线性复杂性?
编辑:我的意思是3中的随机元素:给定N个元素的任意顺序,检索一个介于0和N-1之间j
的元素号。j
对于 anstd::vector
它只是下标,对于 anstd::list
或 anstd::set
它从begin()
等开始递增列表/集迭代器 j 次。