Comment insérer dans std::map?
Est-il un std itérateur je pourrais utiliser pour insérer des éléments dans std::map à l'aide d'un algorithme std (par exemple std::copy) ?
J'ai besoin d'un conteneur pour lier un objet à une chaîne, et j'ai pensé à utiliser un std::map. Est-il un meilleur conteneur? J'ai oublié de dire - éléments doit être triée.
Vous devez vous connecter pour publier un commentaire.
Je pense que ce que l'OP est à la recherche d'
std::inserter(mymap, mymap.end())
de sorte que vous pouvez faire:
Les types d'entrée doit être une paire de type de votre carte prend, sinon votre algorithme devra être std::transform avec une fonction/foncteur de convertir le type de données d'entrée dans un std::pair.
insertion n'est pas réellement un itérateur, mais basé sur un modèle de fonction qui produit un itérateur (std::insert_iterator, qui est basé sur un modèle type, mais le type est automatiquement résolu dans l'appel de fonction).
.begin()
pour le deuxième paramètre doit rendre les choses plus vite. Sinon, il n'a pas vraiment d'importance. Voir par exemple sgi.com/tech/stl/insert_iterator.html .Afin de les insérer dans
std::map
vous devez utiliserstd::make_pair()
.Par exemple:
Essayer quelque chose de similaire. 🙂
Oui,
std::copy
pouvez insérer plusieurs éléments dans un plan, si vous utilisez unstd::insert_iterator
comme le OutputIterator (utiliser la fonction d'assistancestd::inserter
pour créer ces; de cette façon, le type de modèle peut être déduite). Les "éléments" d'une std::map sont des paires clé-valeur, que vous pouvez créer avecstd::make_pair
, comme Prasoon illustre. (Le type réel eststd::pair<Key, Value>
; encore une fois, la fonction d'assistance permet de modèle type de déduction.) Si vous avez les clés en une seule séquence et les valeurs d'une autre, vous devriez être en mesure d'utiliserstd::transform
pour produire une séquence de paires clé-valeur.