C++; 我尝试在C++中使用MultuMAP。主要目的是有一个存储多重映射指针的映射
现在,当我尝试插入到多重贴图时,我遇到了问题。谁能告诉我哪里出了问题C++; 我尝试在C++中使用MultuMAP。主要目的是有一个存储多重映射指针的映射,c++,pointers,map,multimap,C++,Pointers,Map,Multimap,现在,当我尝试插入到多重贴图时,我遇到了问题。谁能告诉我哪里出了问题 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] = &
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;
}
typedef多重映射mm;
typedef映射v_映射;
int main()
{
v_图map1;
v_map::迭代器it;
it=map1.find(23);
mm*mm_映射_指针;
if(it==map1.end())
{
mm_map1;
map1[23]=&m_map1;
mm_map_指针=&m_map1;
}
其他的
{
mm_map_pointer=it->second;
}
mm_映射_指针->插入(对(1,2));
返回0;
}
问题在于mm_映射_指针->插入(对(1,2));
有人能帮忙吗
{
mm m_map1;
map1[23] = &m_map1;
mm_map_pointer = &m_map1;
} // end of scope
您的问题是m_map1
超出范围并被破坏,留下一个悬空的指针
您的问题是
m_-map1
超出范围并被破坏,留下一个悬空的指针。您的m_-map1
是一个局部变量,您试图在映射中存储指向该变量的指针。当包含该变量的块退出时,这将导致指针悬空
有两种方法可以解决此问题:
- 我的首选方法是直接将
多映射
存储在映射
中(即不使用指针)。作为奖励,这大大简化了您的代码:
typedef多重映射mm;
typedef映射v_映射;
v_图map1;
map1[23]。插入(make_pair(1,2));
就这样
- 您的另一个选项是使用
new
创建multimap
的持久副本。在这种情况下,您的map
应该持有shared_ptr
,这样您就不必手动取消分配multimap
您的m_map1
是一个局部变量,您试图在映射中存储指向该变量的指针。当包含该变量的块退出时,这将导致指针悬空
有两种方法可以解决此问题:
- 我的首选方法是直接将
多映射
存储在映射
中(即不使用指针)。作为奖励,这大大简化了您的代码:
typedef多重映射mm;
typedef映射v_映射;
v_图map1;
map1[23]。插入(make_pair(1,2));
就这样
- 您的另一个选项是使用
new
创建multimap
的持久副本。在这种情况下,您的map
应该持有shared_ptr
,这样您就不必手动取消分配multimap
有什么问题?编译器错误?运行时错误?“有人能帮忙吗?”如果这是你的问题,那么答案是否定的,因为你还没有告诉我们你想要解决的问题是什么。你犯了什么错误?当你尝试时会发生什么?您期望会发生什么?编译器错误,在mm_映射_指针->插入(对(1,2));你有什么问题?代码编译并运行正常(添加了#include;使用名称空间std;
)。您好。。问题是以动态方式插入多重映射。我想把所有这些都放在一个循环中,这样我就可以在需要的时候创建一个新的多重映射。问题是什么?编译器错误?运行时错误?“有人能帮忙吗?”如果这是你的问题,那么答案是否定的,因为你还没有告诉我们你想要解决的问题是什么。你犯了什么错误?当你尝试时会发生什么?您期望会发生什么?编译器错误,在mm_映射_指针->插入(对(1,2));你有什么问题?代码编译并运行正常(添加了#include;使用名称空间std;
)。您好。。问题是以动态方式插入多重映射。我想把所有这些都放在一个循环中,这样我就可以在需要的时候创建一个新的多重映射。谢谢Ben,你能给我一些建议吗,如何让动态多重映射ie在循环中创建多重映射并在任何地方初始化它。@user328560:Simple!只需取出v_映射中的星号
typedef.-)(这是我在回答中提到的“直接存储multimap
”方法。作为奖励,它还使您的代码约为其原始大小的五分之一。)谢谢Ben,您能给我一些建议吗,如何让动态multimap ie在循环中创建multimap并在任何地方初始化它。@user328560:简单!只需取出v_映射中的星号
typedef.-)(这就是我在回答中提到的“直接存储multimap
”方法。作为奖励,它还使您的代码大约为原始大小的五分之一。)
typedef multimap<int, int> mm;
typedef map<int, mm> v_map;
v_map map1;
map1[23].insert(make_pair(1, 2));