std :: unordered_map插入错误shared_ptr c ++

时间:2014-01-13 19:54:25

标签: c++ insert unordered-map

我第一次使用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;'

有什么想法吗?

2 个答案:

答案 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>()} );