我的std::元组的哈希值.任何改进
My std::hash for std::tuples... Any improvements?
有些人可能已经注意到std::hash不支持元组。所以我添加了一个过载,这看起来比我到目前为止看到的解决方案"更好"。谁有进一步削减代码的想法?请注意,这是一个编译器杀手!唯一可以编译它的是"Clang 3.2"…英特尔编译器13.1没有得到专门化,并不断告诉"c++标准不支持哈希之类的"。我们不需要讨论最初的微软编译器,对吧?
顺便说一句,我的解决方案支持递归元组,如std::tuple<std::tuple<int,int>,int>
,所以我不确定这是否也适用于我今天看到的现有解决方案。
namespace std
{
template<typename... TTypes>
class hash<std::tuple<TTypes...>>
{
private:
typedef std::tuple<TTypes...> Tuple;
template<int N>
size_t operator()(Tuple value) const { return 0; }
template<int N, typename THead, typename... TTail>
size_t operator()(Tuple value) const
{
constexpr int Index = N - sizeof...(TTail) - 1;
return hash<THead>()(std::get<Index>(value)) ^ operator()<N, TTail...>(value);
}
public:
size_t operator()(Tuple value) const
{
return operator()<sizeof...(TTypes), TTypes...>(value);
}
};
}
看了就知道了:
template<int N, typename THead, typename... TTail>
size_t operator()(Tuple value) const
{
constexpr int Index = N - sizeof...(TTail) - 1;
return hash<THead>()(std::get<Index>(value)) ^ operator()<N, TTail...>(value);
}
相关文章:
- boost::包含提升单元的元组的哈希值
- 如何使用 STL 哈希容器中的哈希值检索元素?
- 哈希函数中同一键的不同值和良好的哈希值排序
- 字符串单词的唯一哈希值
- 是否可以将哈希值作为编译时常数
- CMake检查下载文件的哈希值(MD5/SHA256)
- 正在将哈希值存储到int
- 如何计算没有标签信息的 mp3 文件的哈希值
- 如何定义函数序列的哈希值(C++)
- C++-对象图的哈希值类似于boost::序列化
- 如何获取哈希值,C++ hash_map
- 在Qt中创建目录的哈希值
- 杂音哈希 - 哈希值不一致
- 逐行散列文件时错误的 md5 哈希值
- 为什么不同程序执行之间的哈希值不一致
- 如何有效地存储和排序生日攻击的哈希值
- unordered_map存储桶中的所有元素是否具有相同的哈希值
- 使用openssl/MD5时出现意外的MD5哈希值
- 存储具有字符串类型键的哈希值的最佳结构
- 我的std::元组的哈希值.任何改进