Qual è il modo più veloce per salvare e sfogliare gli oggetti usando vettori + / o mappe? (C ++)

-1

Sto facendo un oggetto Garbage class usando c ++:

#include "Object.h"

class ObjectGarbage
{
   public:
      ObjectGarbage();
      ~ObjectGarbage();

      void Call_All_Objects()
      {
          //(some for loops) {Garbage[..][..][i].Main(); }
      }
      void GetObject(Object *obj)
      {
          //Data type get (obj)
      }

   private:
   //Object Data
}

L'oggetto classe è una classe base di molti altri come attori, HUD ... Devo trovare un modo per dividere e salvare gli oggetti per un accesso più facile.

Ho deciso di creare la prima divisione di dati per livelli (quando si disegna). Poi li dividerei con il nome della classe specifica come HUD, Actor, ... e poi suddividerli con il nome delle istanze come Actor1, Actor2, Actor3 ...

Come posso rendere queste divisioni il più veloce possibile? Forse qualcosa del genere:

vector<map<string, map<string, Object*>>>
//(Layer as vector -> Specific Class Name as Map -> Name of the Instance as map too)

Non ho mai provato qualcosa del genere e non so nemmeno come usarlo correttamente. Allora, come posso? Ci sono modi migliori?

    
posta Andre Marques 10.05.2016 - 00:54
fonte

1 risposta

1

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.

    
risposta data 10.05.2016 - 09:45
fonte

Leggi altre domande sui tag