Diciamo che ho una collezione di oggetti Person, ognuno dei quali si presenta così:Quale contenitore STL per i dati ordinati con accesso basato su chiave?
class Person
{
string Name;
string UniqueID;
}
Ora, gli oggetti devono essere conservati in un contenitore che mi permette di ordinare in modo che io possa determinato elemento X facilmente individuare l'elemento X + 1 e X-1.
Tuttavia, ho anche bisogno di un accesso rapido basato su UniqueID, in quanto la raccolta sarà ampia e una ricerca lineare non la taglierà.
La mia "soluzione" corrente consiste nell'utilizzare una lista std :: in combinazione con una std :: map. L'elenco contiene le persone (per l'accesso ordinato) e la mappa viene utilizzata per associare UniqueID a un riferimento all'elemento dell'elenco. L'aggiornamento del "contenitore" in genere comporta l'aggiornamento sia della mappa che dell'elenco.
Funziona, ma credo che ci dovrebbe essere un modo più intelligente di farlo, forse boost:bimap
. Suggerimenti?
MODIFICA: C'è una certa confusione circa il mio requisito per "ordinare". Per spiegare, gli oggetti vengono trasmessi in sequenza da un file e l''ordine' degli elementi nel contenitore deve corrispondere all'ordine dei file. L'ordine non è correlato agli ID.
Cosa intendi per 'X + 1' e' X-1'? Ho la sensazione che non si riferisca al campo 'UniqueID', quindi che cos'è? A quale ordine ti riferisci? –
Mi riferisco all'ordinamento all'interno del contenitore. cioè (presupponendo un vettore) Array [X], [X-1] e [X + 1] – Roddy
Qual è l'ordine nel contenitore? Penso che sia quello che Matthieu sta cercando di definire. – Joel