我正在尝试将一些值对插入到 std::map 中。在第一种情况下,我收到一个指向地图的指针,取消引用它并使用下标运算符分配一个值。IE
(*foo)[index] = bar;
后来,当我尝试遍历集合时,返回的键/值对在所有情况下都包含 null 的 value 属性,但第一个 (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++;
}
}
我完全没主意了。请问有人有什么建议吗?