Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

A propos de unordered_map

3 réponses
Avatar
Adrien
Bonjour,

J'ai un léger doute sur la fonction membre erase( const key_type& k) de la
classe tr1::unordered_map qui renvoie le nombre d'éléments effectivement
supprimés.

Il me semblait que les clefs étaient uniques, donc il y a-t-il des cas où
cette fonction retourne autre chose que 0 ou 1 ? J'ai regardé quelques docs
en ligne qui ne sont pas très claires sur ce point.

Merci d'avance.

3 réponses

Avatar
Michael Doubez
On 10 nov, 13:23, Adrien <adrien+ wrote:
Bonjour,

J'ai un léger doute sur la fonction membre erase( const key_type& k) de la
classe tr1::unordered_map qui renvoie le nombre d'éléments effectivem ent
supprimés.

Il me semblait que les clefs étaient uniques, donc il y a-t-il des cas où
cette fonction retourne autre chose que 0 ou 1 ? J'ai regardé quelques docs
en ligne qui ne sont pas très claires sur ce point.



unordered_map est le nom standard de multimap. Tu peux y stocker
plusieurs éléments avec la même clé.

--
Michael
Avatar
James Kanze
On 10 Nov, 21:04, Michael Doubez wrote:
On 10 nov, 13:23, Adrien <adrien+ wrote:



> J'ai un léger doute sur la fonction membre erase( const
> key_type& k) de la classe tr1::unordered_map qui renvoie le
> nombre d'éléments effectivement supprimés.



> Il me semblait que les clefs étaient uniques, donc il y
> a-t-il des cas où cette fonction retourne autre chose que 0
> ou 1 ? J'ai regardé quelques docs en ligne qui ne sont pas
> très claires sur ce point.



unordered_map est le nom standard de multimap. Tu peux y
stocker plusieurs éléments avec la même clé.



unordered_map, c'est le nom standard de hash_map. Et tu n'y peux
stocker qu'un élément par clé. La raison que erase renvoie un
entier, ici, c'est par souci d'orthogonalité : dans
unordered_multimap ou multimap, erase peut bien renvoyer
d'autre chose que 0 ou 1. Et en fin de compte, c'est aussi plus
clair que s'il renvoyait bool : avec bool, on ne sait jamais
exactement ce qui est vrai et ce qui est faux. (Une solution
encore meilleur aurait été de renvoyer succeeded ou failed,
valeurs d'un enum standard. Mais je trouve que le compte, c'est
déjà pas si mal. Maintenant, si seulement l'élément avait des
champs nommés key et value...)

--
James Kanze
Avatar
Adrien
James Kanze wrote:

unordered_map, c'est le nom standard de hash_map. Et tu n'y peux
stocker qu'un élément par clé. La raison que erase renvoie un
entier, ici, c'est par souci d'orthogonalité : dans
unordered_multimap ou multimap, erase peut bien renvoyer
d'autre chose que 0 ou 1. Et en fin de compte, c'est aussi plus
clair que s'il renvoyait bool : avec bool, on ne sait jamais
exactement ce qui est vrai et ce qui est faux. (Une solution
encore meilleur aurait été de renvoyer succeeded ou failed,
valeurs d'un enum standard. Mais je trouve que le compte, c'est
déjà pas si mal. Maintenant, si seulement l'élément avait des
champs nommés key et value...)




Merci c'était très clair.