J'ai un vecteur d'entiers, et j'ai besoin de beaucoup de déplacements, de hachages et de changements sur cette liste. Mais ... Je vais principalement besoin d'accéder à ces éléments par leur valeur.Accéder aux éléments de la liste chaînée à partir d'un vecteur de références à ces éléments
Donc ce que j'ai concocté est une idée d'utiliser une liste std :: list (double-linked-list) qui facilitera les opérations de ré-ordonnancement. Ensuite, pour créer également un vecteur indexé par les valeurs entières, où les valeurs sont des vecteurs de références aux éléments std :: list. De cette façon, je n'ai pas à parcourir toute la liste chaînée pour trouver une valeur particulière dans la liste, car j'aurai ces petits vecteurs de références.
Je n'arrive pas à comprendre comment configurer cela.
Voici un échantillon de ce que j'ai essayé de faire:
vector<int> original = { 1, 1, 0, 2, 1, 3, 1, 0 };
vector<vector<int*>> byNumber(4);
list<int> linkedList;
for (int i = 0; i < original.size(); ++i) {
linkedList.push_back(original[i]);
byNumber[original[i]].push_back(*linkedList[i]);
}
Repousser les articles « originaux » dans la liste chaînée est assez facile, mais la création puis la référence en byNumber est où je suis coincé sur. J'ai essayé de pousser &(*linkedList[i])
aussi. Je ne suis pas clair sur la syntaxe que je peux utiliser pour le faire, et si ce sera même possible. J'ai aussi essayé unique_ptr au lieu de int * que je peux changer si cela est trop problématique.
'int *' n'est pas une référence à un élément de liste. Vous voudrez peut-être stocker * itérateurs *. –