2011-11-21 13 views
5

Sto lavorando per migliorare le prestazioni di un programma che utilizza sia la libreria grafico Boost che boost::bimap. La profilazione ha rivelato che la maggior parte del tempo veniva speso nell'assegnazione della memoria e nella deallocazione. La classe adjacency_list della libreria di diagrammi utilizza in modo significativo le prestazioni migliorate di boost::fast_pool_allocator. Una grande porzione delle rimanenti allocazioni di memoria si verifica in boost::bimap, quindi ho voluto sperimentare l'utilizzo di un allocatore personalizzato anche lì. Il documentation dice che è possibile specificare l'allocatore come l'ultimo parametro del modello del bimap, ma non dice quale tipo dovrebbe essere l'argomento del modello per l'allocatore stesso. Ad esempio, per i tipi di X e Y, inUtilizzare un allocatore personalizzato con boost :: bimap

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

quello che dovrebbe essere compilato per Z?

+0

caldamente consiglio di non usare il boost: bimap. L'uso di un contenitore multi-index di boost con due indici direttamente è molto più chiaro rispetto al codice che utilizza una bimap. – James

+0

@Autopulated: Grazie - lo considererò un'alternativa la prossima volta altrimenti proverei un bimap. –

risposta

3

Credo che la risposta sia che per Z, è necessario inserire std::pair<X,Y>. Questo ha funzionato nel mio caso, ma ho voluto postare qui perché

  • non è evidente dalla documentazione
  • codice Boost non è veloce a leggere
  • Googling era scostante
  • e altre persone potrebbero avere utili commenti (per esempio, non ho testato se questo dipende da ciò che la vista a sinistra oa destra del bimap è)
+0

+1, conoscenza utile. – James

Problemi correlati