我正在研究一个需要的项目
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)
myMap.insert(strFileName,pObj);
make_pair()在里面使用insert()
#include <utility>
//...
myMap.insert (std::make_pair(strFileName, pObj) ) ;
Run Code Online (Sandbox Code Playgroud)