この質問は回答されているので、以下では私が達成したいことを説明します。データ構造のデザインパターン
ハッシュされる可能性のあるプライマリ列を介して、すべての行エントリに効率的にアクセスできるように設計された表形式のデータ構造を作成したかったのです。私はこれについて最善の方法は、それぞれが1つの列を表す二重リンクリストのベクトルと、ノードへのプライマリ列エントリハッシュのマッピングを含むマップを維持することだと考えました。さて、最初の間違いは、ノードへのポインタを格納できるようにするために、二重リンクリストの独自の実装を作成する必要があると考えていることです。実際には、標準でイテレータをstd :: list do挿入やスプライシングの結果として無効になることはありません(larsmansの答えを参照)。ここに私が以前にやりたかったことを説明するための擬似コードがあります。前に説明したように、入力タイプを表すtypename Tの存在と、dlistとノードクラスの存在を仮定します。
typedef dlist<T> column_type;
typedef vector<T> row_type;
typedef ptr_unordered_map<int32_t, row_type> hash_type;
shared_ptr<ptr_vector<column_type> > columns;
shared_ptr<hash_type> hashes;
は今、larsmansの答えを読んだ後、私はそれがあるとしてBoost.MultiIndexが私のニーズのすべてを満たしているので、私は、このいずれかを必要としないことを学びました。私がしたとしても、Boost.Intrusiveは、私が記述したことを達成するためのより効率的なデータ構造を提供します。
質問に興味を持った人や助けをしたすべての人に感謝します。これ以上質問がある場合は、別のコメントを追加してください。質問を明確にするために最善を尽くします。そのbegin
方法は通常の代わりに参照のイテレータを返す以外
Operator []は、基本となる連続したメモリシーケンスである場合にのみオンにする必要があります。データ構造のようなリンクされたリストでそれを使用することは、IMOの良い考えではありません。これが、 'std :: list'、' operator [] 'が' std :: vector'のときにオーバーロードされない理由です。 – Mahesh
@Mahesh - 'std :: map'が連続しているので? '' Operator [] 'は、データ構造体が格納されたデータの識別子をサポートする場合にのみ許可されなければなりません。' 'vector''と' 'map''は行いますが、' 'list''は含みません。 – littleadv
@littleadv - 情報をありがとう。 – Mahesh