J'ai un Étant donné que je voudrais faire beaucoup de Le fait est que je veux Je crois que le moyen le plus simple serait d'utiliser un le feriez-vous de cette façon, ou est-ce une mauvaise idée? P>
Merci! P> std :: Liste
STD :: String Element < / code>. p>
std :: Find_if Code> en fonction de l'élément
std :: string code>, je crois un
std :: map < String, double, myownbarinypédicate> code> avec
inférieur_bound code> et
upper_bound code> serait plus adéquat. p>
insérer des éléments code> dans le
std :: mappez code> de manière efficace. Donc, je souhaite utiliser un itérateur supplémentaire pour rendre le
insérer code> plus rapidement. P>
const_réverse_itéator code> pour passer via la liste
std :: list code> et pour utiliser le
commencer () code> du
std :: map code>. p>
3 Réponses :
Vous pouvez utiliser std :: copy et std :: inserter: car l'itérateur d'une liste
+1: Cela a également une bonne performance et fonctionne également avec une carte existante
Utilise std :: inserter (the_map, the_map.begin ()) code> ou
std :: insert (the_map, the_map.end ()) code> mieux ici, étant donné que la liste est trié?
En fait, j'ai un doute, le problème est que fin code> ne sera pas réactualisé, c'est-à-dire que c'est
fin code> au moment où l'insertion code> est créée, il est créé Ne reste pas
fin code>, et donc je ne sais pas si la complexité est linéaire.
Hmm, en regardant insert_iterator , la performance n'est pas géniale, car lors de l'insertion L'itérateur après l'insertion précédente, ce qui signifie que l'insertion de carte «lente» sera effectuée.
J'ai sur les mêmes performances en utilisant cette solution avec commencer () code> ou
fin () code>. Merci pour cette réponse vraiment intéressante.
Je voudrais juste itérer sur la liste et insérer chaque paire dans une carte ou utiliser la méthode nette Luther Blissett a décrit.
Le fait que je n'obtiens pas ce que vous essayez de faire signifie que cela entraînera soit un code illisible ou que vous êtes un chemin.
Pourquoi faites-vous cela de cette façon?
Pouvez-vous modifier le code pour vous renvoyer une carte au lieu d'une liste en premier lieu? P>
Je dois utiliser une liste STD :: Liste en premier lieu, car il y a des éléments qui ont la même clé STD: String. Ensuite, il y a des opérations qui me permettent d'utiliser une STD :: Carte à la fin. Je pourrais envisager d'utiliser un STD :: Carte un peu plus tôt dans le processus, mais la question est toujours pertinente dans ce cas.
Avez-vous envisagé d'utiliser STD :: Multimap? Voyez ici: SGI.com/tech/stl/multimap.html
Si vous avez déjà une liste triée, ce qui est trié en fonction du prédicat prédicat code>, vous pouvez simplement faire ce qui suit:
sorted_list.assign(map.begin(), map.end());
L'avantage de cette réponse est sa simplicité. Merci!
Ne mettez pas [C ++] sur le titre. C'est ce que sont les étiquettes.
Avec les réponses fournies par Grddev et Luther Blissett, j'ai sur les mêmes performances que possible avec ma suggestion initiale (en utilisant
commencements () code>, pas
fin () code>). Cependant, les deux sont concis. J'accepte la réponse de Grddev pour sa simplicité, mais je garde à l'esprit le
std :: inserter code>. Merci à tous!