2016-04-07 34 views
0

名前付きオブジェクトストレージを設計する最良の方法を見つけようとしました:std :: map < std ::文字列、NamedObject>std :: map design:マップキーと格納されたオブジェクト名(メンバ)のstd :: stringを使用

std :: mapここで、keyはオブジェクトの名前です。一方で、getName()メソッドを使用してその名前を返すなど、自分自身でオブジェクトを識別できるようにしたいと思います。私を苛立たせるものは、std :: stringの2つのコピーを設定する以外の方法はありませんでした.1つはキー用で、もう1つはメンバーとしてのオブジェクト内にあります。

誰かが提案をお持ちの場合は、

編集:

基本的に、これはリソースマネージャです。最も重要なことは、彼の名前でリソースを見つけることです。しかしいつか、私は手の下にリソースを持っているとき、私は彼の名前を知ることができるようにしたいと思います。最初は、私はベクトルについて考えました...しかし、それを動かして、すべてのオブジェクトに正しい名前を見つけるために名前を尋ねるというアイデアは、私には悪いものでした。

+0

余分な複雑さのように思える、私つまり、boost_multi_index_containerはこれを許可しますが、あなたが望ましくない可能性がある余分な複雑さです。 –

+0

はい。私はstd :: mapとして使いやすいソリューションを探しています。私はオブジェクトから名前を削除し、それを識別するためにイテレータを使用することを考えていますが、マップ管理以外の場所でstd :: mapの一部を使用したくありません。 –

+1

はい、これは標準ライブラリのすべての結合コンテナの制限です。だからこそ、ほとんどの問題は「命名」と「実行」を別々の概念として表現できるため、通常はそれらを分離することが適切です。 –

答えて

0

このような厳しいメモリ要件がありますか? そうならば、私はあなたがこのようなオブジェクト名に任意の「ハッシュ」関数を作成することができると思う:

int hash(const std::string& obj_name); 

、その後

std::multimap<int, NamedObject> 

を使用しますが、それは申し訳ありません

+0

このようにオブジェクト名のコピーは保存しませんが、ハッシュ関数を呼び出す必要があるたびに –

関連する問題