我第一次使用std :: unordered_map,并且在插入我创建的地图时遇到问题。
ClassA标题:
Class ClassA
{
public:
void func();
private:
std::unordered_map<std::string, std::shared_ptr<ClassB>> map;
}
ClassA cpp:
void ClassA::func()
{
map = std::unordered_map<std::string, std::shared_ptr<ClassB>>();
map.insert("string", std::make_shared<ClassB>());
}
我收到错误c2664 std :: _ List_iterator&lt; _Mylist&gt; std :: _ Hash&lt; _Traits&gt; :: insert(std :: _ List_const_iterator&lt; _Mylist&gt;,std :: pair&lt; _Ty1,_Ty2&gt;&amp;&amp;&amp;)':无法将参数1从'const char [17]'转换为'std :: _ List_const_iterator&LT; _Mylist&GT;'
有什么想法吗?
答案 0 :(得分:3)
问题不在于shared_ptr
,而在于string
密钥。显式实例化将解决此问题。您还需要插入一个pair
组成的键和值,而不是一个键和一个值:
map.insert(std::make_pair (std::string("string"), std::make_shared<ClassB>()));
另见this related answer更新颖,更复杂的解决方案。
答案 1 :(得分:0)
initializer_list也可以解决您的问题。
map.insert( {"string", std::make_shared<ClassB>()} );