C++ STL carte , std::pair comme la clé
C'est de cette façon que j'ai définie par carte.
std::map<std::pair<std::string,std::string>, int> edMap;
Je suis confondre sur la façon d'insérer des valeurs , je suis d'erreur de compilation toujours.
C'est de cette façon que j'essaie d'insérer.
std::pair<std::string,std::string> key;
edMap.insert(key,d);
Erreur de Compilation est
1>------ Build started: Project: spellsuggest, Configuration: Debug Win32 ------
1>Compiling...
1>breathalyzer.cpp
1>d:\personal\spellsuggest\spellsuggest\breathalyzer.cpp(70) : error C2664: 'std::_Tree<_Traits>::iterator std::_Tree<_Traits>::insert(std::_Tree<_Traits>::iterator,const std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::_Tree<_Traits>::iterator'
1> with
1> [
1> _Traits=std::_Tmap_traits<std::pair<std::string,std::string>,int,std::less<std::pair<std::string,std::string>>,std::allocator<std::pair<const std::pair<std::string,std::string>,int>>,false>,
1> _Ty1=const std::pair<std::string,std::string>,
1> _Ty2=int
1> ]
1> and
1> [
1> _Ty1=std::string,
1> _Ty2=std::string
1> ]
1> and
1> [
1> _Traits=std::_Tmap_traits<std::pair<std::string,std::string>,int,std::less<std::pair<std::string,std::string>>,std::allocator<std::pair<const std::pair<std::string,std::string>,int>>,false>
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>Build log was saved at "file://d:\personal\spellsuggest\spellsuggest\Debug\BuildLog.htm"
1>spellsuggest - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Pour référence future, quand vous posez des questions sur Stack Overflow qui mentionne des erreurs de compilation, assurez-vous de toujours inclure (c'est à dire de copier-coller) le compilateur réel message d'erreur mot à mot dans votre post. Nous sommes des êtres humains, pas des compilateurs.
Absolument rien à voir avec la question - mais je suis intrigué à un fichier nommé "breathalyzer.cpp" à l'intérieur d'un projet(?) nommé "spellsuggest".
commencé avec quelque chose et maintenant avec quelque chose. petite goofup.
Quoi de mal avec:
Absolument rien à voir avec la question - mais je suis intrigué à un fichier nommé "breathalyzer.cpp" à l'intérieur d'un projet(?) nommé "spellsuggest".
commencé avec quelque chose et maintenant avec quelque chose. petite goofup.
Quoi de mal avec:
edMap[key] = d;
OriginalL'auteur Avinash | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
Essayons:
Observer que la carte est
value_type
est toujoursstd::pair<const key_type, mapped_type>
, donc dans votre cas, c'eststd::pair<my_key_type, int>
-- d'une paire dont le premier membre est lui-même une paire!Avec cela à l'esprit, vous pouvez aussi l'utiliser
make_pair
:Enfin, comme Sven points, il peut ou peut ne pas être un opérateur de comparaison par paires (je pense qu'il y a, tout de même), donc si il n'y en a pas, vous devez écrire vous-même. Lexicographique de comparaison sur les deux éléments devraient faire. Sophie attend 🙂
(Voici le lexicographique paire de comparaison; vous n'avez pas besoin de l'écrire, c'est déjà là🙂
Cheers, je suis juste de mentionner la comparaison de donner une idée.
Il n'est pas valide pour ajouter un
operator<
à l'espace de noms std de toute façon. Si vous avez besoin, on peut se spécialiserstd::less
.Attendez, pourquoi je n'ai même pas mis les mst, je pense que ce serait complètement inutile de toute façon. (Mais spécialisée
less
est bien sûr encore plus belle.)OriginalL'auteur Kerrek SB
De la méthode d'insertion prend la pleine paire de la carte du type, de sorte que vous avez à faire cela:
emplace
dans C++0x.OriginalL'auteur Sven
Noter que cette:
va échouer à insérer quoi que ce soit si il y a déjà une clé avec la même valeur.
Ce, sur l'autre main:
permet de créer un nouvel élément dans la carte, ou de remplacer la valeur précédente, si l'on existait.
OriginalL'auteur Robᵩ