我正在尋找一個數據結構來保存獨特元素的無序集合,這將支持以下操作聯想/隨機訪問容器
- 插入/在收集任何地方元素的缺失
- 查詢如果一個元素存在
- 訪問一個隨機元素
天真,1和2表明使用相聯的容器中,例如unordered_set
,但是3的元素數量是線性的。使用隨機存取容器,例如vector
,使得3容易,1可以在O(1)中完成,但是2又是O(N)。
的問題是,如果有解決這個線性複雜已知的方式?
編輯:用3中的隨機元素表示:給定N個元素的任意排序,檢索元素編號j
其中j
介於0和N-1之間。對於std::vector
它只是下標,爲std::list
或std::set
它遞增列表/設置迭代器進行j次從begin()
等
std :: set怎麼樣? – lezebulon
通過哪個鍵訪問隨機元素?如果它是無序的,那麼它不能是索引 - 這意味着std :: set或std :: hash_map或類似。 –
@lezebulon:對於std :: set 3仍然是O(N),不是嗎? –