use*_*947 2 c++ hash stl unordered-set stdhash
所以我使用的库有一个枚举(说它的名字LibEnum).我需要有一个std::unordered_set的LibEnum,但我得到的编译错误是没有专门std::hash为它.我可以很容易地写它并且只返回值的数量(第一个元素是0,第二个1等),但是我应该把它放在哪个专门化以及它应该是什么样子?我无法修改库源.
enum LibEnum { A, B, C, D};
std::unordered_set <LibEnum> mySet;
//need std::hash for LibEnum
//how should it look like?
Run Code Online (Sandbox Code Playgroud)
您可以专门std::hash为您的类型:
namespace std {
template <>
struct hash<FullyQualified::LibEnum> {
size_t operator ()(FullyQualified::LibEnum value) const {
return static_cast<size_t>(value);
}
};
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以hash在任何地方定义类型,并在实例化时将其作为附加模板参数提供std::unordered_map<FooEnum>:
// Anywhere in your code prior to usage:
struct myhash {
std::size_t operator ()(LibEnum value) const {
return static_cast<std::size_t>(value);
}
};
// Usage:
std::unordered_map<LibEnum, T, myhash> some_hash;
Run Code Online (Sandbox Code Playgroud)
这两种方法都不需要您修改库.
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |