使用指针访问std :: map中的值是明智的吗?

Jas*_*son 9 c++ pointers stdmap

将指针从a返回std::map::find到数据并使用它而不是获取数据副本是危险的吗?

目前,我得到一个指向我的地图中的条目的指针,并将其传递给另一个函数来显示数据.我担心项目移动导致指针变为无效.这是一个合法的问题吗?

这是我的示例函数:

MyStruct* StructManagementClass::GetStructPtr(int structId)

{
    std::map<int, MyStruct>::iterator foundStruct;
    foundStruct= myStructList.find(structId);
    if (foundStruct== myStructList.end())
    {
        MyStruct newStruct;
        memset(&newStruct, 0, sizeof(MyStruct));
        myStructList.structId= structId;
        myStructList.insert(pair<int, MyStruct>(structId, newStruct));

       foundStruct= myStructList.find(structId);
   }

   return (MyStruct*) &foundStruct->second;
Run Code Online (Sandbox Code Playgroud)

}

Jer*_*fin 8

毫无疑问,返回迭代器而不是指针更为典型,尽管它可能没什么区别.

至于剩余有效:地图迭代器保持有效,直到/除非它引用的项目从地图中删除/删除.

在地图中插入或删除其他节点时,可能会导致地图中的节点重新排列.这是通过操纵节点之间的指针来完成的,因此它会更改其他节点包含指向您关注的节点的指针,但不会更改该特定节点的地址或内容,因此指向该节点的指针/迭代器仍然有效.