一連のキー値オブジェクトを保存したいのですが、値オブジェクト自体 (およびそれへの参照) がそのキーを知っている場所です。また、キーのみを指定してこれらのオブジェクトを効率的に検索したいと考えています。
class SomeObject
{
private:
//String or integer. int seem cheap enough to duplicate with std::map, but
//strings seem pretty expensive when there may be thousands of objects in existence.
//Reference/Pointer to key is fine
const SomeOtherObject key;
...other stuff...
public:
...methods, some of which use the key in some way...
};
- std::マップ
- 値がキーにアクセスできないように、ストレージが std::pair である必要があるようです。値にキーが含まれている場合は、複製する必要があります。
- 値内のキーが何らかの方法で変更されないように実際に強制するわけではありません
- std::set
- キーフィールドだけでなく、値全体が const になることに気付くまで、カスタム比較メソッドを使用してキーごとに一意性を提供する、非常に優れたソリューションのように見えます。
- std::vector (または他の配列/リストのようなソリューション)
- 線形検索を使用できます。または、アイテムがソートされている場合はバイナリ検索を使用できます。ただし、これはパフォーマンスの点で最適ではないと思われます。目的の動作を実際に実装するには、何らかの追加レイヤーが必要です。