2009-03-23 11 views
0

jeComment convertir C++ std :: élément de liste Multimap iterator

std::list<multimap<std::string,std::string>::iterator> > 

Maintenant, j'ai nouvel élément:

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test") 

Je veux éviter la nécessité de mettre en température multimap et faire insérer au nouvel élément juste pour obtenir son retour iterator pour que je puisse la repousser au:

std::list<multimap<std::string,std::string>::iterator> > 

puis-je en quelque sorte éviter cette création de la multimap temp. Merci

+0

Veuillez effacer la liste de quoi? –

Répondre

2

Vous devez insérer la paire valeur/clé dans un multimap avant d'en obtenir un itérateur.

Un itérateur ne fonctionne pas tout seul. Si vous stockez des itérateurs de plusieurs multimaps différents, vous devrez probablement stocker plus qu'un simple itérateur dans la liste.

Peut-être:

  1. un pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator> où la première est la deuxième itération et est l'extrémité itérateur. Où le premier est l'itérateur, et le second est un pointeur vers le multimap auquel appartient l'itérateur.

  2. un autre type de solution.

EDIT: Je suis d'accord avec Mykola Golubyev: Il est souvent une mauvaise idée de stocker itérateurs pour une plus longue période de temps, comme les itérateurs peuvent être invalidés.

2

Vous n'avez pas spécifié le type de données que vous stockez dans votre list. Quoi qu'il en soit, en supposant que vous voulez ajouter les valeurs pointées par une clé particulière, vous pouvez appeler list.insert(*mapIter).

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test") 

Vous devez ajouter à votre multimap via map.insert. Cette fonction renvoie un itérateur. Vous pouvez ensuite ajouter cet itérateur à votre liste en toute sécurité.

std::list<multimap<std::string,std::string>::iterator> yourlist; 
// .... 
multimap<std::string,std::string>::iterator itr = 
           yourmultimap.insert(aNewMmapValue); 
yourlist.insert(itr); 
1

Le type std::multimap<std::string,std::string>::iterator est un itérateur à un std::pair<const std::string, std::string>stocké dans un std :: multimap. Si l'élément n'est pas stocké dans un multimap, il ne peut pas être référencé via un itérateur mulitmap. Vous pouvez stocker un std::list<std::pair<std::string,std::string> > à la place.

1

Ne stockez pas d'itérateurs. Utilisez soit des const ictateurs, soit une meilleure façon de stocker les pointeurs sur les éléments de la carte.

Questions connexes