Consigli 1: considera l'utilizzo di std::unordered_map
(spiegazione su en.cppreference.com) se bisogno di una rapida ricerca e non è necessario l'ordinamento per chiave. In C ++, std::unordered_map
è un'implementazione della tabella hash che hai appreso dalla classe "strutture dati e algoritmi". D'altra parte, std::map
è un albero di ricerca binario bilanciato.
Consiglio 2: data una struttura di dati a più livelli, se i primi livelli sono relativamente stabili (cioè non ci saranno inserimenti o cancellazioni dal primo o due livelli), è possibile concatenare le chiavi per questi livelli e li usa come chiave in std::map
o std::unordered_map
.
Consigli 3: l'hashing delle stringhe richiede tempo. Se stai costruendo un motore di gioco, potresti voler pre-elaborare il design del gioco inserito dall'utente del motore di gioco, in modo da assegnare tutte le chiavi stringa in interi unici. Ciò ridurrà il sovraccarico di hashing quando il motore di gioco è in esecuzione. Ad esempio, se l'utente del motore di gioco ha progettato un gioco che coinvolge tre frutti e tre animali, puoi assegnare un intero univoco a ciascuna stringa: "mela" = 1, "banana" = 2, "cantalupo" = 3, "asino" = 4, "elephant" = 5, "fox" = 6. Questa mappatura da stringa a numero intero può avvenire in anticipo.
Suggerimento 4: se è necessario cercare oggetti utilizzando più di una proprietà, prendere in considerazione l'apprendimento di Mostra multipagina (www.boost.org) . Come minimo, leggi l'introduzione e i diagrammi per capire come affrontare il problema.
Consigli 5: Mentre stai progettando un motore di gioco, potresti scoprire alcune insidie nascoste dei contenitori STL di nidificazione. Per rompere il nidificazione, potrebbe essere necessario utilizzare alcuni indicatori. Puntatori intelligenti come unique_ptr
e shared_ptr
potrebbero essere utili.
Infine, il problema di progettazione che stai affrontando potrebbe essere troppo difficile o troppo grande per essere spiegato chiaramente. In questi casi, probabilmente non otterrai alcuna risposta utile su nessun forum su Internet. Considera la possibilità di collaborare con qualcuno che ha maggiore esperienza nel linguaggio di programmazione e / o nella progettazione di un motore di gioco.