符号なしの整数 ID フィールドを持つ約 70 ~ 150 の異なる構造体 X があります。これらは、プログラムの初期化時に読み込まれて初期化され、その後変更されることはありません。それらにアクセスするための最速の方法 (頻繁に発生します) は、次の (または他の方法?) の中でどれですか?
std::vector v; を使用します。ここで、v[X.id] = X; X& x = v[id]; を実行してアクセスします。(これは最初にコピーを行う必要がありますが、後で基本的にフラットな配列で id によるルックアップを行うだけです。
上記と同じですが、std::vector v; X* x = v[id]; これにはもう 1 つのレベルの間接性があるため、私はこれについて警戒しています。
a std::map - 上記に比べてやり過ぎのように感じますか?
上記と同じですが、unordered_map - 繰り返しますが、70 ~ 150 回のオカレンスが提案 3 に勝るものはありません。
もっと賢いものはありますか?1 で見られる問題の 1 つは、アクセス パターンが少しまばらである可能性があることですが、それが最速の方法である場合に対処する方法がわからないことです。