我正在开展一个需要
的项目class MyObj;
map<string, MyObj*> myMap;
这里逻辑是将文件名映射到MyObj类。
如果我尝试插入以下
string strFilename = "MyFile";
MyObj* pObj = new MyObj();
myMap.insert(strFileName, pObj); // This line throwing following error.
没有用于调用
的匹配函数'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
来做到这一点答案 0 :(得分:21)
我已经输入了这些东西以使其更具可读性......
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));
答案 1 :(得分:13)
std :: map需要一对。
您有两种选择:
myMap[strFileName] = pObj;
或者:
myMap.insert(std::make_pair(strFileName,pObj));
答案 2 :(得分:7)
myMap.insert(strFileName,pObj);
在insert()
make_pair()
#include <utility>
//...
myMap.insert (std::make_pair(strFileName, pObj) ) ;
答案 3 :(得分:3)
没有insert
成员将键和值作为参数。只需使用索引运算符:
myMap[fileName] = obj;
答案 4 :(得分:2)
map<string,MyObj*> myMap;
string strFilename = "MyFile";
MyObj* pObj = new MyObj();
myMap[strFilename] = pObj;
应该工作得很好。 只记得清除地图不会释放指针所指向的内存。
答案 5 :(得分:2)
插入需要一对,尝试这样的事情:
mymap.insert ( pair<string,MyObj*>(strFilename,pObj) );
答案 6 :(得分:1)
尝试使用boost :: ptr_map(来自boost :: ptr_container库)。使用boost :: assign库,您甚至不需要手动调用new:
class MyObj {
MyObj() { /* some... */ }
};
typedef boost::ptr_map< string, MyObj > MyMap;
MyMap m;
using namespace boost::assign;
ptr_map_insert( m )( "first" )( "second" )( "third" );
在这种情况下,将在m中添加三个元素(使用键“first”,“second”和“third”以及三个创建的对象MyObj())。
或者:
class MyObj {
MyObj( int _i ) : i( _i ) { /* some... */ }
int i;
};
typedef boost::ptr_map< string, MyObj > MyMap;
MyMap m;
using namespace boost::assign;
ptr_map_insert( m )( "first", 1 )( "second", 2 )( "third", 3 );
在这种情况下,将以m为单位添加三个元素。第一个元素有键“first”和值MyObj(1),第二个键“second”和MyObj(2),第三个键“第三个”和MyObj(3)。
答案 7 :(得分:0)
您正在正确呼叫insert()
。它不需要单独使用键和值,它需要这样的一对:
myMap.insert(pair < string, MyObj* > (strFileName, pObj));
答案 8 :(得分:0)
尝试使用boost :: ptr_map()