如何在地图中存储指针

Ven*_*ta 17 c++ stl map

我正在研究一个需要的项目

class MyObj;

map<string, MyObj*> myMap;
Run Code Online (Sandbox Code Playgroud)

这里的逻辑是将文件名映射到MyObj类.

如果我尝试插入以下内容

string strFilename = "MyFile";
MyObj* pObj  = new MyObj();

myMap.insert(strFileName, pObj); // This line throwing following error.
Run Code Online (Sandbox Code Playgroud)

没有匹配的呼叫功能 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*> > >::insert(std::string&, void*)'

任何人都可以帮我解决这个问题.是否有更好的方法我们可以使用STL来做到这一点

Moo*_*ice 22

我已经输入这些东西以使其更具可读性......

typedef std::map<std::string, MyObj*> MyMap;
typedef std::pair<std::string, MyObj*> MyPair;

MyMap myMap;
string strFilename = "MyFile";
MyObj* pObj = new MyObj();
myMap.insert(MyPair(strFilename, pObj));
Run Code Online (Sandbox Code Playgroud)


rob*_*bev 14

使用insert函数时,std :: map需要一对.

您有两种选择:

myMap[strFileName] = pObj;
Run Code Online (Sandbox Code Playgroud)

要么:

myMap.insert(std::make_pair(strFileName,pObj));
Run Code Online (Sandbox Code Playgroud)


Pra*_*rav 8

myMap.insert(strFileName,pObj);

make_pair()在里面使用insert()

#include <utility>
//...
myMap.insert (std::make_pair(strFileName, pObj) ) ;
Run Code Online (Sandbox Code Playgroud)