2011-11-21 14 views
5

Estoy trabajando para mejorar el rendimiento de un programa que usa Boost Graph Library y boost::bimap. La creación de perfiles reveló que la mayor parte del tiempo se gastaba en asignación de memoria y desasignación. Hacer que la clase adjacency_list de la biblioteca de gráficos use boost::fast_pool_allocator mejoró significativamente el rendimiento. Una gran parte de las asignaciones de memoria restantes se producen en boost::bimap, así que quería experimentar con el uso de un asignador personalizado allí también. El documentation dice que puede especificar el asignador como el último parámetro de plantilla del bimap, pero no dice qué tipo debe ser el argumento de plantilla para el asignador. Por ejemplo, para este tipo de X y Y, enUse un asignador personalizado con boost :: bimap

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

lo que debe ser completado para Z?

+0

Recomiendo encarecidamente no usar boost: bimap. Usar un contenedor multi-índice de impulso con dos índices directamente es mucho más claro que el código que usa un bimap. – James

+0

@Autopulated: Gracias. Consideraré esa alternativa la próxima vez, de lo contrario, probaría una bimap. –

Respuesta

3

Creo que la respuesta es que para Z, debe completar std::pair<X,Y>. Esto funcionó en mi caso, pero yo quería escribir aquí porque

  • no es obvio a partir de la documentación
  • código Boost no es rápido de leer
  • googlear era inútil
  • y otras personas podrían tener utilidad comentarios (por ejemplo, no he probado si esto depende de la vista izquierda o derecha del bimap)
+0

+1 sin embargo, conocimiento útil. – James

Cuestiones relacionadas