invalid use of template-name 'std::hash' without an argument list template <class T> class std::hash;这句话是什么意思
时间: 2024-02-05 17:13:15 浏览: 226
c++ std::invalid_argument应用
5星 · 资源好评率100%
这句话是一个编译器错误信息,它表明在使用标准库中的 `hash` 模板时没有传递类型参数。在 C++11 中,标准库为自定义类型提供了默认的哈希函数实现,可以通过将类型作为模板参数传递给 `std::hash` 来使用这些实现。例如,如果要为类型 `MyType` 创建哈希函数,可以使用以下代码:
```
#include <functional>
struct MyType {
int x;
bool operator==(const MyType& other) const {
return x == other.x;
}
};
namespace std {
template <>
struct hash<MyType> {
size_t operator()(const MyType& obj) const {
return hash<int>()(obj.x);
}
};
}
```
在这个例子中,我们通过特化 `std::hash` 模板来为 `MyType` 类型提供哈希函数。注意,我们使用了 `hash<int>()` 来获取内置类型 `int` 的哈希函数实现。如果不传递类型参数,编译器就会报出上述错误信息。
阅读全文