Supponiamo che ci siano 2 classi: Paese e Città. Entrambi hanno nomi, quindi una mappa si adatterebbe come conainer
map<std::string, Country> countries;
Nella classe Paese c'è una mappa simile che contiene tutte le città - per semplicità, diciamo che è pubblica:
map<std::string, City> cities;
Ora al primo livello se una città specifica deve essere indirizzata, la richiesta assomiglia a questa:
countries.at("Japan").cities.at("Tokyo");
(Nel mondo reale dovrei piuttosto usare find
e controllare ogni volta se il paese / città desiderato esiste realmente, giusto?)
Ora diciamo al livello più alto che vogliamo memorizzare in un vettore un insieme delle nostre città preferite. Vedo 2 opzioni per farlo:
// Option 1: Store the cities as references:
vector<City&> favouriteCities;
// Option 2: Store the ID's (Names) of the countries and the cities as strings
vector<pair<std::string,std::string>> favouriteCities;
Quindi per ottenere la mia prima città preferita nell'opzione 2 dovrò accedervi in questo modo:
countries.at(favouriteCities[0].first).cities.at(favouriteCities[0].second);
Quali sarebbero i pro e i contro di queste opzioni? AFAIK: l'opzione 1 è più performante e più conveniente. Ma con l'opzione 2 hai la possibilità di controllare se la città preferita desiderata è ancora nel sistema e non è stata eliminata nel frattempo (quindi un riferimento non sarebbe valido).
Ci sono altri punti da considerare?