Remplacer un map<AnsiString,int> par un vector<pair<AnsiString,int> > - C++ - Programmation
Marsh Posté le 01-08-2003 à 15:29:30
Bon, j'en suis là, mais je pense pas que ce soit le plus efficace;
Code :
|
Marsh Posté le 01-08-2003 à 15:30:38
Un map<AnsiString,vector<int> >
Je ne comprends pas trop bien ton problème là en fait. C'est quoi ce conteneur que tu veux ?
Marsh Posté le 01-08-2003 à 15:50:05
Je veux un conteneur qui ait une clé et sa valeur, avec la possibilité d'avoir plusieurs clés identiques (mais contigues), donc comme multimap, mais sans le tri automatique de la clé, donc multimap ne fonctionne plus...
Ce qui me rapproche le plus d'un multimap<string,int> est donc un vector<pair<string,int> >
Mais le problème avec ce vecteur, c'est que si je fais des push_back sur des paires au hasard, les clés ne seront pas ordonnés... Or moi je veux que les Paires ayant la même clé soient côte à côte dans le vecteur, de manière à utiliser equal_range.
Ex d'un vecteur correct:
(Clé1,8) | (Clé1,0) | (Clé3,142) | (Clé2,10) | (Clé2,1420)
Marsh Posté le 01-08-2003 à 16:01:02
haazheel a écrit : Je veux un conteneur qui ait une clé et sa valeur, avec la possibilité d'avoir plusieurs clés identiques (mais contigues), donc comme multimap, mais sans le tri automatique de la clé, donc multimap ne fonctionne plus... |
Donc, un simple vector< pair<AnsiString, vector<int> > doit suffire, et en plus, tu n'utiliseras pas comme ça d'opération d'insertion au milieu d'un vector qui sont horribles en terme de perfs.
PS : pourquoi AnsiString et pas string simplement ?
Marsh Posté le 01-08-2003 à 16:13:23
Kristoph a écrit : |
Plus simple encore: vector< pair<AnsiString, int> >
Ca suffit...
Et comme encore une fois j'ai mal compris le problème qui m'était posé, je viens de me rendre compte que je peux tout rentrer à coup de push_back parce que les éléments vont déjà arriver dans l'ordre
PS: Parce que Borland utilise AnsiString pour sa bibliothèque VCL et que je peux très difficilement m'en passer
Marsh Posté le 02-08-2003 à 02:34:07
Kristoph a écrit : |
Et quand on a des modifications à effectuer au milieu d'un conteneur, est-ce que le vecteur est encore si horrible, ou bien c'est uniquemement au niveau de l'insertion?
Si c'est le cas, vous me conseillez quoi? Une liste?
Marsh Posté le 01-08-2003 à 15:16:11
Re bonjour,
Il me faut un conteneur équivalent à multimap, mais sans le tri.
Donc il me faut un vector<pair<AnsiString,int> >.
Voilà où j'en suis:
Il me faudrait une fonction d'ajout d'une paire à ce vecteur, qui fasse en sorte d'ajouter ma Paire à la suite d'une paire de même clé
Ex: J'ai dans mon vecteur les paires suivantes:
clé1,8
clé1,14
clé3,54
clé3,0
Si je veux insérer clé2,14 je voudrais qu'il l'insére à la fin parce que clé2 n'existe pas encore dans les paires
En revanche si je veux insérer la paire clé1,51 je voudrais qu'il me l'insére juste après la dernière Clé1
J'ai tenté plusieurs trucs, mais sans succès...
Vous me proposeriez quoi?
Merci d'avance!!
---------------
Another .Net Blog