2012-11-13 14 views
7

'un ayrıştırma sürümü Ben gömülü bir uygulama yazıyorum ve kullandığım ortam maalesef şu anda C++ 11 desteğine sahip değil.hash_map/unordered_map

Bir karma/sırasız harita (normal std::map performans nedenleriyle yapmaz) uygulamanız gerekir, ancak temiz bir şekilde yapmanın bir yolunu bulamıyorum.

Boost, tüm kitaplığı pratik olarak getirmeden çalışmak istemez. SGI'den gelen orijinal STL hash_map bile birkaç başlık istiyor ve standart kütüphane işlevselliğini kopyalar ve belirsiz işlev çağrılarına neden olur. Bu gerçek bir karmaşa.

Uygulama, sürüm oluşturma, kalite denetimi, V & V, vb. Kolaylığı için, gerçekten varolan standart kitaplıktan yararlanan ve tümüyle aynı klasöre yerleştirebileceğim birkaç başlık dosyasında bulunan bir şeye ihtiyacım var. diğer kaynak/başlık dosyaları. Böyle bir şey var mı, yoksa umutsuz muyum? Uzunca bir süredir aradım ama boş ellerde.

Yardımlarınız için çok teşekkürler. Gerektiğinde daha fazla açıklığa kavuşabilirim.

+0

Özel bir ayırıcı ile 'std :: map' kullanmayı denediniz mi? Bu muhtemelen tüm performans sorunlarınızı oraya sabitler. –

+0

Sorun şu ki, sürekli olarak yeni öğeleri haritadan/yerlerinden kaldırıyorum/yerleştiriyorum. Her seferinde bir şeyleri yeniden düzenlemek zorunda kalırsa, çok yavaştır. Bu özel bir ayırıcı ile çözülebilir mi? Benim cehalet için özür dilerim, daha önce hiç bir şey kullanmamıştım ama std :: allocator'. – llakais

+2

Dengelemenin fark edilir bir performans sorununa neden olduğu bir durumum olmadı. Bu durumda _certain_? RB-Tree balansı oldukça hızlı ve sadece ağaç _very_ lopsided olduğunda dengeleniyor. –

cevap

1

GNU uygulamasına baktınız mı? Ubuntu Makinemde unordered_map.h hiçbir şey içermiyor. Bu dosya /usr/include/c++/4.6/ dosya "unordered_map" daha başlıklarını var ama sanırım o çimdik rağmen yaklaşık 400 çizgi

/usr/include/c++/4.6/bits/unordered_map.h 

bulunmaktadır.

GNU.org'dan (?) Uygulama için kaynak kodunu bulabilir ve kendiniz derleyebilirsiniz?

+0

Bunu Ubuntu'da da kontrol edeceğim, bahşiş için teşekkürler! – llakais

+0

Üzgünüz, bu beni kontrol etmek için çok uzun sürdü ... Sanırım, gerçekten de dahil edilmesi gereken en üst düzey klasörde 'unordered_map' dosyasının doğru olması gerektiğini düşünüyorum, fakat biraz değişiklik yapmanın toplam dosya sayısını tutması gerektiğini düşünüyorum aşağı getirmek zorunda. Her durumda, bu eski SGI STL'yi kullanmaktan çok daha iyidir. Tekrar teşekkürler. – llakais