2017-07-19 1 views
0

Pendant une carte de carte, quelle est la bonne façon d'insérer des données?C++ - Insérer des données dans la carte de la boucle de carte

En premier moment dans mon code à l'intérieur d'une fonction i insérer des données à ma carte de carte comme celui-ci (et son bon travail):

outMap[TYPE_REQ_USER][req->number] = req; 

Après cette ma taille de la carte est 1.

Au deuxième moment, à l'intérieur d'une autre fonction, j'ai besoin d'itérer la carte et si j'ai trouvé la clé TYPE_REQ_USER j'ai besoin d'ajouter une nouvelle donnée à la carte de la carte. J'essaie comme ça, mais après j'imprimer la taille de la carte et nous dit son 1 et non 2 (prévu)

Ma carte de boucle carte pour insérer des données:

for (outMap_t::iterator itOutMap = outMap.begin(); itOutMap != outMap.end(); ++ itOutMap) 
{ 
     for (intMap_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); ++itInMap) 
     { 
     if (itOutMap->first == TYPE_REQ_USER) 
     { 
      //map insert 
      outMap[TYPE_REQ_USER][req->number] = req; 
     } 
     } 
} 

Alors quel est le problème dans mon boucle d'insertion?

MODIFIER deux

Alors maintenant la même tonalité (TYPE_REQ_USER) i peuvent avoir deux éléments distincts.

Alors sais quand je suis en train de parcourir la carte et supprimer les éléments de la clé que je vais avoir l'erreur de défaut de segmentation, parce que dans la première itération je fais:

qnRunningType_JobId.erase (itOutMap);

Mais dans la deuxième itération j'ai l'erreur de défaut sementation parce que je suis en train de supprimer le itOutMap mais nous l'avons déjà supprimé dans la première itération ..

+0

Passez-vous votre carte des cartes à la fonction par référence? Vous pouvez être en train de le copier afin de ne pas effectuer de changements persistants dans votre fonction. Également, remplacez-vous la valeur par erreur plutôt que d'ajouter une nouvelle valeur? – hnefatl

+0

Nop, parce que la carte des cartes appartient à la classe où j'ai la fonction. Donc, son seul appel la carte de la carte – RMRMaster

+0

Poster un peu plus de code - les bits pertinents des deux fonctions et la classe dont ils sont membres. – hnefatl

Répondre

1

(commentaire converti pour répondre à l'intégralité)

L'utilisation d'un std::map, l'insertion d'un élément qui existe déjà écrasera l'élément existant. Vous pouvez vérifier si vous avez remplacé un élément en utilisant std::map::insert et en vérifiant le second élément de la paire renvoyée, comme décrit here.

+0

Merci. Je résous déjà ce problème, quand j'insère en boucle iterating je fais: outMap [it-> d'abord] [req-> nombre] = req; Le it-> first est égal à TYPE_REQ_USER donc pour le même TYPE_REQ_USER j'ai deux éléments différents. S'il vous plaît voir mon édition 2, pour voir mon nouveau problème – RMRMaster

+0

OUBLI .. je résous déjà. Merci pour l'aide – RMRMaster