次のニーズを満たすC++のコンテナを探しています。
- インデックスで要素を削除する必要があります。
- 1つの要素を削除した直後に、別の要素を前面に挿入します(常に!!!!!)
- それ以外にサイズの変更はありません。
- インデックスを作成する必要があります。
- コンテナに格納されている値は、インデックスとして一意です。
- 1つの値に1つのインデックスを割り当てる必要があります。1つの値を削除または追加しない限り。次に、インデックスを調整する必要があります。
そのコンテナと少し並行して機能している別のデータセットについては、これらの機能とこれらの追加機能を備えたデータセットが必要です。
- これは2つの方向で機能する必要があります。一意の値を格納するため、実際の値(100%一意)を介してインデックスに非常に高速にアクセスできる必要があります。これは頻繁に発生するためです。
値型のいずれかが、、、...のような演算子をサポートしていることを認めることはでき<
ませ<=
ん==
。!=
質問がある場合は、質問してください。不明な点がある場合は、さらに説明します。
編集:
私が要求されたので、ここにその背後にある実際の問題があります:
一定量のオブジェクトを格納できるテンプレートコンテナクラスで作成されたライブラリを作成しています。これらのオブジェクトはすべて同じタイプです。(もちろん...)これらのオブジェクトのもう1つの非常に重要なプロパティは、一意のインデックスによって再作成できることです。このインデックスも何でもかまいません。この場合の例は、平面上にあるオブジェクトを作成できる2次元空間であり、オブジェクトクラスに座標を指定することで(この場合は単一のオブジェクトとして)、そこにあるすべてのプロパティを再作成できます。これで、コンテナが最大容量に達すると、最後に使用されたオブジェクトが削除されます。私の考えは、コンテナに一意のインデックスを付けるというものでした。目的のオブジェクトがまだ保存されている場合、関数はオブジェクト上のポインターを返し、それを内部コンテナー内で前面に移動します。
これが必要なのは、すべてのRAMとはるかに多くのRAMを簡単に使用できるプログラムがあるからです。毎回オブジェクトを生成して破棄することはできましたが、それは私には計算能力の無駄のように思えます。そこで、長期間使用されていない場合にのみオブジェクトを削除するこのコンテナを思いつきました。これは私の特定のケースでは非常に便利です(巨大な地図でのパスファインディング)
お役に立てば幸いです。
EDIT2:
Ok。これをさらに明確にします。
簡単なデータキャッシュから始めましょう。
[0] d1 [1] d2 [2] d3 [3] d4
ここで、d3を使用したとしましょう。構造は次のようになります。
[0] d3 [1] d1 [2] d2 [3] d4
ここで、完全に新しい要素をコンテナーに追加します(d5)。
[0] d5 [1] d3 [2] d1 [3] d2
それが背後にある考え方です。int
インデックスとしての-valuesの代わりに、削除される可能性のあるすべてのオブジェクトを復元できるカスタムインデックスクラスを使用できるようになりました(これは問題ではありません。クラスが機能するための要件です)。
最初のステートメントから始めましょう。最初のケースでは、次のようになります。
[0] i1 [1] i2 [2] i3 [3] i4
[i1] 0 [i2] 1 [i3] 2 [i4] 3
2番目の例は次のようになります。
[0] i3 [1] i1 [2] i2 [3] i4
[i1] 1 [i2] 2 [i3] 0 [i4] 3
そして最後に、最後の状態は次のようになります。
[0] i5 [1] i3 [2] i1 [3] i2
[i1] 2 [i2] 3 [i3] 1 [i5] 0
それがより明確になることを願っています。2つ目は、複数のコンテナが可能である可能性があります。