Bonjour à vous !
Je cherche désespérément un conteneur dont la taille est dynamique (comme un std::vector par exemple) avec la possibilité d'ajouter des éléments, de changer leur valeur, de les effacer ... etc.
La difficulté : j'ai besoin d'une fonction d'accès "inversée" qui retourne le rang d'un élément (en prenant en argument l'élément lui même).
Évidement les éléments stockés sont tous uniques.
Je ne connais pas très bien la librairie standard, j'ai fait plusieurs essais infructueux en utilisant un std::unordered_set.
Mon gros problème est que le nombre d'éléments à stocker est potentiellement très important.
Je souhaite accéder aux rangs des éléments avec une complexité constante, ou éventuellement en O(log(N)).
Voici un code fictif pour mieux expliquer ce que j'ai en tête :
J'espère que ma question n'est pas trop idiote et qu'elle n'a pas déjà été traitée 156 fois sur ce forum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Conteuneur_a_definir<int> toto; toto.insert(28); // insertion des éléments dans l'ordre initiale toto.insert(10); toto.insert(43); toto.insert(79); toto.insert(267); toto.insert(2); toto.insert(8); cout << toto.getRank(79) << endl; // affiche "3" toto.erase(79); toto.changeValue(267,100); cout << toto.getRank(100) << endl; // affiche "3"
Merci beaucoup pour votre aide !![]()
Partager