正确初始化指针映射 - 映射<p*,p*>

And*_*M16 2 c++ maps pointers c++11

我对C++很陌生,甚至在相关的Q/A上查找我没有找到适合我的问题的答案.

我正在努力尝试实例化一个新的指针映射map<p1*, p2*>.

到目前为止,我尝试过:

std::map<myType*, myType*> mapOfVertices = new std::map<myType, myType>;
Run Code Online (Sandbox Code Playgroud)

要么:

std::map<myType*, myType*> mapOfVertices = new std::map<myType*, myType*>;
Run Code Online (Sandbox Code Playgroud)

但我总是得到:

错误:从'std :: map*'转换为非标量类型'std :: map'请求std :: map mapOfVertices = new std :: map;

我很困惑,因为我已经设法成功初始化其他对象,如:

myType* myObj = new myType;
Run Code Online (Sandbox Code Playgroud)

如果我的问题有点微不足道,我很抱歉.提前致谢.

Xir*_*ema 6

您不需要在堆上分配映射对象本身,只需在堆栈上创建它即可.

std::map<myType*, myType*> mapOfVertices;
Run Code Online (Sandbox Code Playgroud)

该代码足以创建地图.无论出于何种原因,如果你想要一个指向地图的指针(包括在堆上分配它),你需要将声明更改为

std::map<myType*, myType*> * mapOfVertices = new std::map<myType*, myType*>;
Run Code Online (Sandbox Code Playgroud)

(注意类型和变量名之间的额外星形)

基于您提供的代码,并且您自己承认,您确实是C++的新手,因为大多数有经验的C++程序员都知道在绝对必要时只使用原始指针,并且您的用例肯定不代表这样的情况.我强烈建议你拿一本书.这里有一个很棒的列表和建议.