2011-11-21 15 views
5

Pracuję nad poprawą wydajności programu, który korzysta z biblioteki Boost Graph Library i boost::bimap. Profilowanie ujawniło, że większość czasu spędzano na alokacji pamięci i dezalokacji. Wykonanie klasy adjacency_list biblioteki wykresów znacznie zwiększa wydajność. Znaczna część pozostałych alokacji pamięci występuje w boost::bimap, więc chciałem także eksperymentować z wykorzystaniem niestandardowego alokatora. documentation mówi, że można określić alokator jako ostatni parametr szablonu bimap, ale nie określa, jaki typ powinien być argument szablonu dla samego przydzielającego. Na przykład, dla typów X i Y, wUżyj niestandardowego przydziału z boost :: bimap

boost::bimap<set_of<X>, set_of<Y>, boost::fast_pool_allocator<Z> > 

co powinno być wypełnione dla Z?

+0

Zdecydowanie nie zalecałbym stosowania boost: bimap. Używanie kontenera z wieloma wskaźnikami z dwoma indeksami bezpośrednio jest o wiele jaśniejsze niż kod używający bimap. – James

+0

@Autopulated: Dziękuję - rozważę alternatywę następnym razem, gdybym inaczej spróbował bimap. –

Odpowiedz

3

Uważam, że odpowiedź brzmi: w przypadku Z należy wypełnić std::pair<X,Y>. To działało w moim przypadku, ale chciałem pisać tutaj, bo

  • to nie jest oczywiste z dokumentacją
  • kod doładowania nie jest szybki, aby przeczytać
  • Googling był nieprzydatny
  • i inni ludzie mogą mieć użyteczne komentarze (na przykład, nie testowałem, jeśli zależy to od lewego lub prawego widoku bimap).
+0

+1, ale przydatna wiedza. – James

Powiązane problemy