插入到指向std::map的指针
insert to a pointer to std::map
我在map
中使用map
:
std::map<int, std::map<DWORD,IDLL::CClass*>*> *MyMap
我使用以下代码插入map
:
std::map<DWORD,IDLL::CClass*> *SecondMap;
SecondMap= new std::map<DWORD,IDLL::CClass*>;
DWORD i = 1;
while (eteration on obj type IDLL::CClass )
{
SecondMap.insert(std::make_pair(i,&obj));
}int j = 1;
MyMap->insert(std::make_pair(1,&SecondMap));
在节目的后面,map
变成空的!
让拥有原始指针通常是一种不好的做法(除非您在特殊情况下,例如您正在构建自定义高级数据结构,并且拥有原始指针在适当的RAII类边界中受到保护)。
第一个选项应该是使用值语义;如果这对您的性能不利,那么您可能希望使用智能指针,如shared_ptr
(这有助于使您的代码更简单,使其异常安全,避免资源泄漏等)。
这是一个示例可编译代码,似乎在VS2010 SP1 (VC10)上工作:
#include <iostream> // for std::cout
#include <map> // for std::map
#include <memory> // for std::shared_ptr and std::make_shared
using namespace std;
typedef unsigned int DWORD;
struct MyClass
{
MyClass() : Data(0) {}
explicit MyClass(int data) : Data(data) {}
int Data;
};
int main()
{
//
// Build some test maps
//
typedef map<DWORD, shared_ptr<MyClass>> InnerMap;
typedef map<int, shared_ptr<InnerMap>> OuterMap;
auto innerMap1 = make_shared<InnerMap>();
(*innerMap1)[10] = make_shared<MyClass>(10);
(*innerMap1)[20] = make_shared<MyClass>(20);
OuterMap myMap;
myMap[30] = innerMap1;
//
// Testing code for maps access
//
const int keyOuter = 30;
auto itOuter = myMap.find(keyOuter);
if (itOuter != myMap.end())
{
// Key present in outer map.
// Repeat find in inner map.
auto innerMapPtr = itOuter->second;
const DWORD keyInner = 20;
auto itInner = innerMapPtr->find(keyInner);
if (itInner != innerMapPtr->end())
{
cout << itInner->second->Data << 'n';
}
}
}
相关文章:
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 当 ofstream 指针位于 std::map 中时,文件写入不会发生 C++.
- 将指向结构数组的指针添加到 std::map
- 为什么 map::找不到指向 const 的指针?
- 将字符指针按顺序存储在 map 中 std::map<char*, int> mymap。将其存储为字符或字符串不是一个选项
- 动态创建一个继承的类,使用STD :: MAP使用基类指针访问
- C 设置STD :: MAP值为结构实例的指针
- 指向结构的指针保留某些属性,同时将其他属性重置为零(使用 map)
- 为什么 std:map 不能接受指针作为键值?
- c++ std map 的擦除功能是否释放了指针键的内存?
- 使用MAP指针时运行时错误
- 访问MAP中的第二个元素,这是对象指针
- 新的STD :: MAP条目中指针的默认值
- 重载 map::key_comp,以便我可以在对象指针的地图上使用 map::find
- 在 std::map 中使用提升智能指针
- 使用指针访问 map 中的行数据 C++
- 使用指针从其密钥中访问MAP的值
- 删除指针作为 std::map 的第一个键
- std::map 和函数指针作为具有不同签名的值
- 在c++中,当map指针被更改为值时,抛出限定符错误