C++

2013-04-06 7 views
5

Birden çok anahtarla eşleştirin. Verileri, hem adlarına hem de dizinlerine göre depolamak istiyorum. Başka bir deyişle, string isimlerini nesnelerle eşleştirmek ve onlara özel bir sipariş vermek istiyorum.C++

İlk önce ortaya çıkan şey, string anahtarının std::vector çiftleri ve nesnesidir. Sipariş, vektördeki pozisyon tarafından verildi.

std::vector<std::pair<std::string, object> > 

Ama bu yaklaşım otomatik string isimlerin teklik kontrol etmez çünkü optimal olarak görünmektedir. Üstelik, nesneleri ilk önce sırasına göre gruplamak yanlıştır, çünkü mantıksal olarak ilk sıra ayrımları isimdir.

Ad ve dizin tarafından erişime izin veren bir veri yapısına ihtiyacım var.

std::magic<std::string, unsigned int, object> collection; 

// access by either string or unsigned int key 
collection.insert("name", 42, new object()); 
collection["name"] 
collection[42] 

Bu kullanım durumu için zaten bir veri yapısı var mı? Eğer değilse, standart kütüphaneyi kullanarak nasıl bir araya getirebilirim? Ayrıca, belirli bir elementten sonra, tüm diğer elemanları hareket ettirmeden yeni elemanlar yerleştirmek için bir yol istiyorum.

+1

İki 'std :: map' nesneleri gerekir. –

+0

@ n.m. Dize adıyla sipariş vermem gerekmiyor. Yani temelde sipariş için bir 'std :: vektör' ve isimler için bir 'std :: unordered_map' gerekir. Ama sorum şu ki bir çözüm ya da en azından tercih edilebilir bir yol varsa. C++ 11 kullanıyorsanız, – danijar

+1

'unordered_map' bir olasılıktır. Endeksler için, "vector" ve "map"/"unordered_map" arasında bir seçim, koleksiyonunuzdaki öğeleri kaldırdığınızda gerçekleşmesi gerekenler tarafından belirlenir. Sabit endeksleri umursamıyorsanız, 'vector' kullanabilirsiniz. Bence iki konteyner * tercih edilen yoldur. –

cevap