#include <string>
#include <unordered_map>
using namespace std;
....
....
unordered_map<char, int> hashtable;
string str = "hello";
char lower = tolower(str[0]);
hashtable.emplace(lower, 1);
....
返回以下编译错误:
1 error C2780: 'std::pair<_Ty1,_Ty2> std::_Hash<_Traits>::emplace(_Valty &&)' : expects 1 arguments - 2 provided
2 IntelliSense: no instance of function template "std::tr1::unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>::emplace [with _Kty=char, _Ty=int, _Hasher=std::hash<char>, _Keyeq=std::equal_to<char>, _Alloc=std::allocator<std::pair<const char, int>>]" matches the argument list
答案 0 :(得分:1)
您使用的旧版Visual C ++不能正确支持emplace
。可能是Visual C ++ 2010。
正如Visual C++ Team Blog曾经说过:
根据C ++ 11的要求,我们已经实现了 布设()/ emplace_front()/ emplace_back()/ emplace_hint()/ emplace_after() 在所有容器中“任意”数量的参数(见下文)。
(...)
VC10支持从1个参数进驻,但事实并非如此 特别有用。
最好的解决方案是升级到最新版本的编译器。
答案 1 :(得分:1)
遵循一些可以解决问题的扩展
#include <utility> // for std::pair
std::unordered_map<char, int> hashtable;
char lower = 'A';
hashtable.emplace(std::pair<char, int>(lower, 1));
如果您的粘贴代码编译似乎取决于底层编译器。处理std ::对的工作适用于例如c ++ 11 - 根据规范(例如cplusplus.com),你的代码片段应该与c ++ 14一起使用。