Bonjour,
J'initialise un itérateur sur le begin() d'une map vide. Je voudrais savoir si à l'insertion d'un nouvel élément, mon itérateur sera automatiquement placé sur le premier élément ou si il faut que je le replace moi-même.
Merci beaucoup !
Bonjour,
J'initialise un itérateur sur le begin() d'une map vide. Je voudrais savoir si à l'insertion d'un nouvel élément, mon itérateur sera automatiquement placé sur le premier élément ou si il faut que je le replace moi-même.
Merci beaucoup !
Bonjour Pitu45
Initialiser ton pointeur avec begin() sur une map vide revient à l'initialiser avec end().
Le template de map::insert est :
ce qui indique que ton pointeur n'est pas modifié et qu'il pointera toujours sur le même élément (et donc sur end()). Il fait donc le mettre à jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part iterator insert ( iterator position, const value_type& x );
Pour information, std::map trie les éléments en fonction de la clé. Il n'est pas nécessaire de lui donner un pointeur (cela permet juste d'accélérer l'insertion).
Si tu veux un pointeur sur l'élément inséré, il suffit de récupérer la variable de retour (code extrait du lien donné en référence) :
voir : http://www.cplusplus.com/reference/stl/map/insert/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // template de la fonction définie par : // pair<iterator,bool> insert ( const value_type& x ); map<char,int> mymap; map<char,int>::iterator it; pair<map<char,int>::iterator,bool> ret; ret = mymap.insert (pair<char,int>('z',500) ); if(ret.second == false) { cout << "element 'z' already existed"; cout << " with a value of " << ret.first->second << endl; }
Partager