comment stocker des pointeurs sur la carte
Je suis en train de travailler sur un projet qui nécessite
class MyObj;
map<string, MyObj*> myMap;
Ici la logique est ici pour la carte nom du fichier à MyObj classe.
Si j'essaie d'insérer après
string strFilename = "MyFile";
MyObj* pObj = new MyObj();
myMap.insert(strFileName, pObj); //This line throwing following error.
no matching function for call pour
'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*> > >::insert(std::string&, void*)'
Quelqu'un peut-il m'aider comment résoudre ce problème. Sont est-il une meilleure façon que nous pouvons le faire à l'aide de STL
source d'informationauteur Venkata
Vous devez vous connecter pour publier un commentaire.
J'ai typedef avais ce genre de choses pour le rendre plus lisible...
std::map nécessite une paire lorsque vous utilisez la fonction d'insertion.
Vous avez deux options, soit:
Ou:
Utilisation
make_pair()
à l'intérieur deinsert()
Il n'y a pas de
insert
membre qui prend une clé et une valeur en tant qu'arguments. Suffit d'utiliser l'opérateur index:Devrait fonctionner parfaitement.
Rappelez-vous juste de compensation de la carte l'habitude de libérer de la mémoire les pointeurs pointent vers.
Insérer veut une paire, essayez quelque chose comme ceci:
Essayer boost::ptr_map (à partir de boost::ptr_container de la bibliothèque). Et avec boost::attribuer la bibliothèque vous même n'avez pas besoin d'appeler de nouveaux manuellement:
Dans ce cas, trois éléments seront ajoutés dans m (avec les touches "premier", "deuxième" et "troisième" et avec trois objets créés MyObj()).
Ou:
Dans ce cas, trois éléments seront ajoutés dans la m. Premier élément clé de la "première" et de la valeur MyObj( 1 ), deuxième clé "deuxième" et MyObj( 2 ), troisième - clé "troisième" et MyObj( 3 ).
Vous appelez
insert()
de manière incorrecte. Il ne prend pas une clé et une valeur séparément, il prend une paire comme ceci:Essayer boost::ptr_map ()