二重索引付けを可能にするコンテナーをセットアップするための (C++ での) 最良の方法は何ですか? 具体的には、オブジェクトのリストがあり、それぞれがキーでインデックス付けされています (キーごとに複数の可能性があります)。これはマルチマップを意味します。ただし、これに伴う問題は、オブジェクトの位置を見つけるためのルックアップが線形よりも悪い可能性があることです。データの重複は避けたいので、各オブジェクトが独自の座標を維持し、マップ内で自分自身を移動する必要があるのは悪いことです (自分のオブジェクトを移動すると、メンバー関数内でデストラクタが間接的に呼び出される可能性があることは言うまでもありません!)。オブジェクトポインターと座標の両方でインデックスを維持し、オブジェクト自体が安定した参照/ポインターを保証するコンテナーが望ましいです。次に、各オブジェクトはイテレータをインデックス (座標を含む) に格納し、十分に抽象化して、そしてそれがどこにあるかを知ってください。Boost.MultiIndex は最良のアイデアのように思えますが、非常に恐ろしく、実際のオブジェクトを const にする必要はありません。
あなたは何をお勧めします?
編集: Boost Bimap は良さそうですが、安定したインデックス作成を提供しますか? つまり、座標を変更しても、他の要素への参照は有効なままでなければなりません。インデックス作成にポインターを使用する理由は、オブジェクトには固有の順序付けがなく、オブジェクトが変更されてもポインターが一定のままである可能性があるためです (IIRC が安定したインデックス作成を提供する Boost MultiIndex での使用を許可します)。