Map

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 16 mai 2005 à 17:06
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 17 mai 2005 à 10:23
Bonjour,



J'ai une map<T1, T2> m. J'ajoute une clé de la manière suivante:



m[t1] = T2(...);

et tout de suite après j'ai besoin de récupérer l'objet que je viens de créer. Si je fais



m[t1] = T2(...);

m[t1].a = 0;



ca va impliquer deux recherches. Y a-t-il un autre moyen de faire ca?

8 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
16 mai 2005 à 23:31
pour le insert, il faut une value



m.insert( i, map< string, int >:: value( "cle1", 1 ) );

ou

m.insert( i, make_pair( "cle1", 1 ) );



sinon pourquoi pas juste find ?

map<string, int>::iterator i = m.find(s);

if ( i != m.end() )

i->second = 1; // i->first vaut s

else

m.insert( make_pair( s, 1 ) );




Ma participation à la saturation du net:
http://hylvenir.free.fr
3
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
17 mai 2005 à 08:29
Oui, désolé c'est bien value_type.



Pour le insert,

si tu fais :

pos = m.insert( make_pair( "cle", 1 ) );



pos est une pair contenant un bool et un itérator où a été insérée

un truc du genre



pair< bool, map< string, int >::iterator > pos = m.insert( make_pair( "cle1", 1 ) );

if ( pos.first )

pos.second->first; // contient cle1 en cas de succès




Ma participation à la saturation du net:
http://hylvenir.free.fr
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2005 à 17:17
Pardon, je me suis embrouillé, c'est pas ca que je voulais faire. Je veux en fait la valeur de t1, par exemple:



map<string, int> m;

string s = "cle1";

m[s] = 1;



Et je voudrais avoir l'adresse de la chaine "cle1" qui est stocké dans map.

Suis-je obligé de faire une recherche pour le retrouver
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
16 mai 2005 à 22:30
Salut,

Par curiosité,

à quoi pourrais te servir l'adresse de cette chaine ? (qui est la clef

et qu'il ne faut pas (trop) modifiée )


Ma participation à la saturation du net:
http://hylvenir.free.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2005 à 23:19
J'ai besoin d'afficher cette chaine par ailleurs, et je souhaite ne
stocker cette chaine que dans la map (pourquoi la mettre à 2
endroits?). L'objet s que j'utilise pour la clé au départ est une
variable locale.



J'ai essayé de faire comme ca:

map<string, int>::iterator i = m.lower_bound(s);

m.insert(i, 1);



mais le 2ème argument de insert ne convient pas
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2005 à 23:44
Oui pour le moment j'utilise find, mais je me disais que c'était idiot
de refaire une recherche, car puisque je viens d'ajouter une clé je
pourrais savoir ou elle est exactement sans avoir à la rechercher. Si
j'utilise insert, j'aurais un itérateur et je pourrais alors
directement avoir i->first
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2005 à 23:45
Je compile avec Visual C++ et

map< string, int >:: value

doit être remplacé par

map< string, int >:: value_type
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2005 à 10:23
Oui, je pense que cette méthode est plus directe. Merci
0
Rejoignez-nous