GNU/Linux >> Tutoriels Linux >  >> Linux

Comment savoir si l'insertion de std ::map a réussi ou échoué ?

En fait la méthode d'insertion qui prend un paramètre d'indication ne retourne pas si l'insertion a réussi ou non. Une façon de vérifier si l'insertion s'est réellement produite serait de vérifier la taille de la carte avant et après l'insertion. Si c'est la même chose, alors l'insertion a échoué (c'est-à-dire que la clé était déjà présente). Je sais que cela semble moche, mais c'est le moyen le plus efficace que je puisse trouver. En fait, je crois qu'il n'y a aucune raison impérieuse pour que l'insert avec un indice ne renvoie pas une paire (y compris le bool) comme le fait l'insert normal sans indice. Mais une fois qu'il a été spécifié dans une norme plus ancienne, il est très difficile de le changer, car il s'agit d'un changement avec rupture, que la communauté C++ déteste le plus souvent.

Réponse originale (mauvaise)

Voir ce lien

... renvoie une paire, avec son membre pair::first défini sur un itérateur pointant soit sur l'élément nouvellement inséré, soit sur l'élément qui avait déjà la même valeur dans la carte. Le pair::second élément de la paire est défini sur true si un nouvel élément a été inséré ou sur false si un élément de même valeur existait.

Le lien contient également un exemple

Par exemple :

if(mp.insert(make_pair(key, value)).second == false)
{
   cout << "Insertion failed. Key was present"
}

typedef std::map<std::string, int> map;
map m;
std::pair<map::iterator,bool> result = m.insert(std::make_pair("hi", 42));

result.second contient ce que vous voulez


Cela dépend de ce que vous entendez par échec ou réussite.

std::map::insert réussit lorsqu'il insère le nouvel élément, sinon il renvoie un itérateur vers un élément déjà existant.

std::map::insert échoue s'il n'y a pas assez de mémoire pour insérer un nouvel élément et lance std::bad_alloc .


Linux
  1. Comment savoir si Dd fonctionne toujours ?

  2. Comment Bash sait-il comment il est invoqué ?

  3. Linux - Comment savoir pour quoi Grep dans Dmesg ?

  4. Comment remplacer un périphérique Btrfs défaillant

  5. Comment savoir si mon serveur a NUMA ?

Comment répertorier les connexions SSH infructueuses sous Linux

Comment installer AutoFS sur Linux

Comment connaître les groupes d'un utilisateur Linux

Comment partager la connexion internet ?

Comment savoir si un disque est un SSD ou un HDD

Comment savoir où un programme est bloqué sous Linux ?