我正在尝试在C ++中使用multimaps。主要目的是存在一个存储多图指针的地图。
现在,当我尝试插入多图时,我遇到了问题。有人能告诉我哪里出错了。
typedef multimap<int,int> mm;
typedef map<int,mm*> v_map;
int main()
{
v_map map1;
v_map::iterator it;
it = map1.find(23);
mm *mm_map_pointer;
if( it == map1.end())
{
mm m_map1;
map1[23] = &m_map1;
mm_map_pointer = &m_map1;
}
else
{
mm_map_pointer = it->second;
}
mm_map_pointer->insert( pair<int, int>(1, 2));
return 0;
}
问题在于mm_map_pointer-&gt; insert(pair(1,2)); 有人可以帮忙吗?
答案 0 :(得分:5)
{
mm m_map1;
map1[23] = &m_map1;
mm_map_pointer = &m_map1;
} // end of scope
你的问题是m_map1
超出范围并被销毁,留下了一个悬空指针。
答案 1 :(得分:5)
您的m_map1
是一个局部变量,并且您正试图在map
中存储指向该变量的指针。当包含该变量的块退出时,这将导致悬空指针。
您有两种方法可以解决这个问题:
我首选的方法是将multimap
直接存储在map
中(即不使用指针)。作为奖励,这可以简化您的代码 lot :
typedef multimap<int, int> mm;
typedef map<int, mm> v_map;
v_map map1;
map1[23].insert(make_pair(1, 2));
就是这样!
您的另一个选择是使用new
创建multimap
的永久副本。在这种情况下,您的map
应该包含shared_ptr<multimap<...> >
,这样您就不必手动取消分配multimap
。