次の操作をサポートする、一意の要素の順序付けられていないコレクションを保持するデータ構造を探しています
- コレクション内の要素の挿入/削除
- 要素が存在するかどうかを問い合わせる
- ランダム要素へのアクセス
単純に、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
の場合はリスト/セット イテレータを j 回インクリメントしますbegin()
。