私はいくつかの値のペアをstd :: mapに挿入しようとしています。 最初のケースでは、マップへのポインタを受け取って逆参照し、添え字演算子を使用して値を割り当てます。私はコレクションを反復処理しようとしたとき、すなわちC + + std :: mapに挿入する際の奇妙なバグ
(*foo)[index] = bar;
その後、私が最初に(map.begin())の項目を除くすべてのケースでvalue属性にnullを含んでキー/値のペアを返されています。奇妙なことは、地図の挿入機能を使用して挿入すると、すべてがうまくいくことです。
foo->insert(std::pair<KeyType,ValueType>(myKey, myValue));
なぜこのようなのでしょうか? 2つの方法が機能的に同等ではありませんか?私はすべてのアイデアのうち、よ文脈
...
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++;
}
}
については、以下の実際のコードのいくつかのスニペットを貼り付けました。誰か提案をお願いしますか?
どのようなタイプですか? – Skurmedel