2011-11-21 13 views
5

Hem Yükseltme Grafiği Kitaplığı'nı hem de boost::bimap'u kullanan bir programın performansını geliştirmek için çalışıyorum. Profilleme, çoğu zaman bellek ayırma ve ayrılma işleminde harcanıyordu. Grafik kitaplığının adjacency_list sınıfını kullanması, boost::fast_pool_allocator performansını önemli ölçüde artırmıştır. Kalan bellek ayırmalarının büyük bir kısmı boost::bimap'da ortaya çıkıyor, bu yüzden orada özel bir ayırıcı kullanarak denemek istedim. documentation, alamatörü bimap'ın son şablon parametresi olarak belirtebileceğinizi, ancak ayırıcının şablon argümanının hangi türünün olması gerektiğini söylemediğini belirtir. Örneğin,Destekle özel bir ayırıcı kullanın :: bimap

yılında tipleri X ve Y için
boost::bimap<set_of<X>, set_of<Y>, boost::fast_pool_allocator<Z> > 
Z için doldurulacaktır gereken

?

+0

Güçlendirme kullanmanızı şiddetle tavsiye ederim: bimap. Doğrudan iki endeksli bir çok-endeksli konteynerin kullanılması, bir bimap kullanan koddan çok daha nettir. – James

+0

@Autopulated: Teşekkürler - Bir dahaki sefere alternatif olarak bimap deneyeceğim. –

cevap

3

Yanıtın, Z için std::pair<X,Y> doldurmanız gerektiğine inanıyorum. Bu benim durumumda çalıştı ama

  • ve diğer insanların kullanışlı olabilir o
  • Boost kodu
  • Googling yararsızdır okumak çabuk değil belgelerinden belli değil

    • çünkü burada sonrası istedim Yorumlar (örneğin, bu bimap'ın sol veya sağ görüntüsünün ne olduğuna bağlı olarak test edilmedim)
  • +0

    +1, ancak yararlı bilgiler. – James