Comment puis-je savoir si std::map insérer réussi ou échoué?
J'ai une carte, dans une application multithread mappage d'une classe appelée uuid de pointeur.
Ce que je veux savoir si une opération d'insertion réussi échoué.
par exemple
_mymap.insert(hint, MyMap::value_type(entry.uuid, itemptr));
T-il lever une exception ou quelque chose si elle ne parvient pas?
Essayé. Je ne pouvais pas trouvé d'exemples qui le montrent. Tous les exemples que supposer insérer réussit.
OriginalL'auteur Matt | 2011-02-24
Vous devez vous connecter pour publier un commentaire.
En fait de la méthode d'insertion qui prend un soupçon de paramètre ne retourne pas de savoir si l'insertion a réussi ou pas. Une façon de vérifier si l'insertion s'est réellement passé à vérifier la taille de la carte avant et après l'insertion. Si c'est la même chose, puis insérez-a échoué (c'est à dire la clé était déjà présent). Je sais que ça fait moche, mais c'est le moyen le plus efficace que je pouvais venir. En fait, je crois qu'il n'y a aucune raison que l'insert avec un soupçon ne doit pas renvoyer une paire (y compris le bool) tout comme le non-indicateur insérer ne. Mais une fois qu'il a été spécifiées dans une norme plus ancienne, il est très difficile de changer, puisque c'est une modification de rupture, dont le C++ pour la plupart de la communauté ressent.
D'origine (mauvaise) réponse
Voir ce lien
... retourne une paire, avec ses membres
pair::first
ensemble pour un itérateur pointant vers le nouvellement inséré l'élément ou de l'élément qui avaient déjà sa même valeur dans la carte. Lepair::second
élément de la paire est définie sur true si un élément nouveau a été inséré ou false si un élément avec la même valeur existé.Le lien contient également un exemple
Par exemple:
IMPORTANT: Si vous venez d'insérer un élément SANS l'indice de paramètre, utilisez la réponse dans le Voir ce lien. L'original de la réponse est incorrecte, car il est pour le cas où nous n'avons pas besoin de l'indice de paramètre, mais l'affiche de la question de l'indication. L'original de la réponse est PAS de mal, si nous n'avons pas besoin de l'indice, ce qui est souvent le cas.
OriginalL'auteur Armen Tsirunyan
résultat.deuxième contient ce que vous voulez
OriginalL'auteur Tristram Gräbener
Cela dépend de ce que tu veux dire par a échoué ou réussi.
std::map::insert réussit lorsqu'il insère l'élément nouveau ou retourne un itérateur à un élément déjà existant.
std::map::insertion échoue si il n'y a pas assez de mémoire pour insérer un nouvel élément et le jette std::bad_alloc.
OriginalL'auteur FredV
Oui, ce serait jeter de l'une des exceptions utilisé dans la STL, par exemple lorsque la mémoire est insuffisante. C'est en cas de échec.
Ou avez-vous été également intéressés de savoir si l'élément était déjà contenue dans l'instance?
OriginalL'auteur 0xC0000022L
Source: http://msdn.microsoft.com/en-us/library/81ac0zkz(v=vs. 80).aspx
Je pense que ton lien est faux. Il pointe vers une page avec le titre "le Système de.Les Collections.Générique De L'Espace De Noms".
Oui et je tiens à souligner que je suis en utilisant gcc sous linux. Espérons que tous les Lse sont créés égaux?
Oh... Désolé! msdn.microsoft.com/en-us/library/81ac0zkz(v=vs. 80).aspx
H: Oui, la STL est normalisée.
OriginalL'auteur renanleandrof
Insérer avec indication de la méthode d'une paire de la même première et d'une seconde que vous êtes sûr n'est pas dans la carte ( comme (size_t) -1 pour une carte de tailles par exemple ). Si l'itérateur renvoyé a cela s'avère impossible en valeur, il a été nouvellement insérée, si ce n'est qu'il a été trouvé dans la carte. L'itérateur renvoyé est alors modifié.
Exemple : pour insérer des paires p (2, 4) et p (6, 5) dans la carte m ((0, 1), (2, 3), (4, 5)).
sorties :
carte initiale == 0->1 2->3 4->5
insertion de la paire 1 == std::pair (2, 4) à partir de la deuxième itérateur
une paire avec un tel premier était dans la carte
m après l'insertion de la paire 1 == 0->1 2->3 4->5
insertion de la paire 2 == std::pair (6, 5) de la troisième itérateur
la paire a été inséré
m après l'insertion de la paire 2 == 0->1 2->3 4->5 6->5
OriginalL'auteur Saint-Martin