La mia applicazione deve modellare ed eseguire operazioni su una rete con 40-50 nodi e in genere meno di 6 spigoli per nodo. Entrambi i nodi e i bordi sono oggetti con circa 1K di dati ciascuno. Durante l'esecuzione, la mappatura della rete viene spesso modificata: i nodi vengono aggiunti e cancellati, i bordi aggiunti e cancellati, oltre alle proprietà dei singoli nodi e bordi regolati. Gli oggetti nodo e gli oggetti bordo vengono allocati utilizzando 'nuovo' con i puntatori risultanti memorizzati in std::list
per ogni tipo di oggetto.
Ho sperimentato due diversi approcci per la mappatura:
-
Metti un contenitore in ogni nodo per contenere ID di spigoli e 2 variabili in ogni spigolo per memorizzare gli ID dei nodi finali.
-
Aggiungi un nuovo contenitore di primo livello, separato dal contenitore degli spigoli e dal contenitore dei nodi, per memorizzare le informazioni di mappatura.
Le funzioni nel nodo e nelle classi membro saranno più facili da implementare, se le informazioni di mappatura sono memorizzate in quelle classi. Apportare modifiche alla mappatura di rete sarebbe molto più semplice se tutti i dati di mappatura fossero memorizzati separatamente. Ma se la mappatura non è memorizzata nei nodi e nei bordi, le funzioni dei membri nei nodi e nei bordi richiedono un modo per ottenere le informazioni di mappatura dall'oggetto padre.
Esiste una struttura dati o una tecnica concettuale che fornisce il meglio da entrambi gli approcci, senza duplicare i dati o interrompere l'incapsulamento? Le prestazioni non sono di grande interesse, dal momento che non sono previsti calcoli estremamente costosi. La preoccupazione più importante riguarda il codice sicuro, comprensibile e gestibile.