J'essaie d'insérer des paires de valeurs dans une carte std :: map. Dans le premier cas, je reçois un pointeur sur la carte, je le déréférence et j'utilise l'opérateur d'indice pour attribuer une valeur. à savoirBogue bizarre lors de l'insertion dans C++ std :: map
(*foo)[index] = bar;
Plus tard, lorsque je tente de parcourir la collection, je rentrai paires clé/valeur qui contiennent NULL pour l'attribut de valeur dans tous les cas, sauf pour la première (map.begin()) élément. La chose étrange est, si je fais l'insertion via la fonction d'insertion de la carte, tout est bien, i.e.:
foo->insert(std::pair<KeyType,ValueType>(myKey, myValue));
Pourquoi serait-ce? Les deux méthodes ne sont-elles pas fonctionnellement équivalentes? J'ai collé quelques extraits de code réel ci-dessous pour le contexte
...
typedef std::map<int, SCNode*> SCNodeMap;
...
void StemAndCycle::getCycleNodes(SCNodeMap* cycleNodes)
{
(*cycleNodes)[root->getId()] = root;
SCNode* tmp = root->getSucc();
while(tmp->getId() != root->getId())
{
// (*cycleNodes)[tmp->getId()] == tmp; // crashes (in loop below)
cycleNodes->insert(std::pair<int, SCNode*>(tmp->getId(), tmp));//OK
std::pair<int, SCNode*> it = *(cycleNodes->find(tmp->getId()));
tmp = tmp->getSucc();
}
// debugging; print ids of all the SCNode objects in the collection
std::map<int, SCNode*>::iterator it = cycleNodes->begin();
while(it != cycleNodes->end())
{
std::pair<int, SCNode*> p = (*it);
SCNode* tmp = (*it).second; // null except for it = cycleNodes->begin()
std::cout << "tmp node id: "<<tmp->getId()<<std::endl;
it++;
}
}
Je suis à court d'idées. Est-ce que quelqu'un a une suggestion s'il vous plaît?
Quel type est racine? – Skurmedel