2016-04-07 40 views
0

Adlandırılmış nesne deposu tasarlamanın en iyi yolunu bulmaya çalıştım: std :: map < std :: dize, NamedObject>std :: harita tasarımı: harita anahtarı ve depolanmış nesne adı için bir std :: dizesi kullanın (üye)

Ben std :: harita anahtar nesnenin adıdır kullanmak istiyorum. Ve diğer taraftan, nesnemin kendi başına tanımlanmasını istiyorum, örneğin getName() yöntemini kullanmak ve bu adı döndürmek gibi. Beni rahatsız eden şey, bir üye için nesne ve bir tanesi için bir tane olmak üzere std :: string'un iki kopyasından daha iyi bir yol bulamadım.

Herhangi bir öneriniz varsa?

DÜZENLEME:

Temelde bu, kaynaklar yöneticisidir. En önemli şey onun adına bir kaynak bulmak. Ama bazen, sadece el altında bir kaynağa sahip olduğumda, onun adını bilmeyi isterim. İlk etapta, bir vektör hakkında düşündüm ... Ama fikrini çözme fikri, her nesneyi doğru olanı bulmak için ismini sormaktı.

+0

üzgün görünüyor, ben demek istedim: boost multi_index_container buna izin verecek, ama istemeyeceğiniz ekstra bir komplikasyon. –

+0

Evet. Std :: map olarak kullanımı kolay bir çözüm arıyorum. Adın nesneden kaldırılması ve onu tanımlamak için yineleyiciyi kullanıyorum, ancak std :: haritasının bir kısmını harita yönetiminden farklı yerlerde kullanmaktan hoşlanmıyorum. –

+1

evet, standart kitaplıktaki tüm ilişkisel kapsayıcıların bir sınırlaması. Bunu söyledikten sonra, çoğu problem "isimlendirme" ve "yapma" terimleriyle ayrı kavramlar olarak ifade edilebilir, bu yüzden bunları ayırmak normaldir. –

cevap

0

Bellek için zor şartlara sahip olduğunuzdan emin misiniz? Evetse , ben böyle nesne adı için herhangi bir "karma" işlevini oluşturabilir düşünüyorum:

std::multimap<int, NamedObject> 

kullanmak sonra

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

ve ancak ekstra karmaşıklığı gibi

+0

bu şekilde, nesne adının kopyasını kaydetmezsiniz, ancak her zaman hash işlevini çağırmanız gerekir –