我正努力使用VS2010在c ++中使用unordered_map做最基本的事情:插入一些内容。
unordered_map<string, string> cats;
//cats.insert("Adam", "Streak");
//cats.emplace("Kyra", "Shadow");
我确定我犯了一个非常简单的错误,但我现在花了两个小时试图弄清楚是否有用。上述两条注释行在取消注释时都会出错。
取消注释cats.insert("Adam", "Streak");
时,错误为:
错误1错误C2678:二进制&#39; ==&#39; :找不到哪个运算符采用类型为&#39; const std :: string&#39;的左手操作数。 (或者没有可接受的转换)c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xfunctional
取消注释cats.emplace("Kyra", "Shadow");
时,错误为:
错误1错误C2780:&#39; std :: pair&lt; _Ty1,_Ty2&gt; std :: _ Hash&lt; _Traits&gt; :: emplace(_Valty&amp;&amp;)&#39; :期望1个参数 - 提供2个
我很困惑,因为互联网上有几个使用这种确切语法的例子。例如,cplusplus.com here。
我做错了什么?
答案 0 :(得分:3)
这两个函数接受std::pair<A,B>
make_pair
是最简单的成对方式。
cats.insert(std::make_pair("Adam", "Streak"));
cats.emplace(std::make_pair("Kyra", "Shadow"));
或
cats.insert(std::pair<std::string, std::string>("Adam", "Streak"));