我正在尝试获取不同类型对象的哈希值,如字符串和向量.
以下代码可以......
std::string data = std::string("abc");
std::cout << std::hash<std::string>()(data) << std::endl;
Run Code Online (Sandbox Code Playgroud)
......但不是这一个,虽然我"只是"替换字符串由类型载体类型.
std::vector<int> data( {1,2,3} );
std::cout << std::hash<std::vector<int> >()(data) << std::endl;
Run Code Online (Sandbox Code Playgroud)
g ++ -std = gnu + 11说:
invalid use of incomplete type 'struct std::hash<std::vector<int> >'
Run Code Online (Sandbox Code Playgroud)
......为什么?
它看起来像你的编译器没有实现std::hash的std::vector.
根据MSDN,Visual Studio只为标量类型和一些字符串类型实现了这一点.根据cpluplus.com,编译器只需要为简单类型实现它,而不是所有类型.