C++ n'offre pas de modèle de collection avec le comportement qui imiterait LinkedHashMap<K,V>
de Java, vous devrez donc gérer l'ordre séparément du mappage.
Ceci peut être réalisé en maintenant les données dans un std::list<std::pair<K,V>>
, et de garder une carte std::unordered_map<k,std::list::iterator<std::pair<K,V>>>
séparée pour consultation rapide de l'élément par clé:
- En ajoutant un élément, ajoutez la clé correspondante/valeur Associer à la fin de la liste et mapper la clé à l'itérateur
std::prev(list.end())
.
- Lors de la suppression d'un élément par clé, recherchez son itérateur, supprimez-le de la liste, puis supprimez le mappage.
- Lors du remplacement d'un élément, recherchez d'abord l'itérateur de liste à partir de la carte non ordonnée, puis remplacez son contenu par une nouvelle paire valeur/clé.
- Lors de l'itération des valeurs, il suffit de répéter
std::list<std::pair<K,V>>
.
Non, vous ne l'avez pas. c'est une structure de données moche pour commencer, pas étonnant que personne n'a jamais suggéré de l'uniformiser –
@DavidHaim hmmm. Alors, comment puis-je créer un hashmap avec un ordre d'itération prévisible? – emadalamoudi
Vous devez vous demander pourquoi l'ordre d'insertion dans un hashmap aurait été important. –