我試圖插入一些值對std :: map。 在第一種情況下,我收到一個指向地圖的指針,將其解引用並使用下標運算符來分配一個值。即奇怪的錯誤,而插入到C + + std :: map
(*foo)[index] = bar;
後來,當我嘗試遍歷集合,我返回包含空值除第(map.begin())項目在所有情況下的價值屬性鍵/值對。奇怪的是,如果我做通過地圖的插入功能的插入,一切都很好,即:
foo->insert(std::pair<KeyType,ValueType>(myKey, myValue));
爲什麼會變成這樣?這兩種方法在功能上是否相同?我已經粘貼了以下實際代碼的一些片段
...
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 2009-04-27 13:05:41