私はアイテムを効率的に削除し、ランダムアクセスをサポートできるデータ構造を探しています。どのデータ構造が効率的な削除とランダムアクセスをサポートしていますか?
また、効率的な挿入が必要ですが、要素の順序は重要ではないため、格納する必要のある最大数の要素に対してメモリを事前に割り当ててから、新しい要素を最後に配置して、他の要素の移動が必要です。
私の知る限りでは、リンクされたリストは削除には最適ですが、要素にアクセスするとO(n)時間かかることがあります。反対に、単純な配列(例えば、C++のvector
)はランダムアクセスプロパティを有するが、このような構造から要素を削除することはO(n)の複雑さを有する。
実際、ランダムアクセスの要件は、実際に必要なものよりも強いものです。構造の要素を無作為に一様に選ぶことができればいいだけです。明らかに効率的なアクセスプロパティは、私が必要とする操作の効率性を意味しますが、その2つが同等かどうかはわかりません。
ありがとうございます!
ハッシュテーブルはそれをイマイチ? – smk
実装がランダムな要素を得ることを許すならば、セットが代案になるかもしれません。(同じ要件が必ずしもそうでないハッシュテーブルにも当てはまるでしょう) –
残念ながら、C++のセット実装はランダムアクセスを許可しません: ( – PBM