我的std ::哈希的std ::元组...任何改进? [关闭](My std::hash fo

2019-07-20 14:28发布

有些人可能已经注意到的std ::哈希不支持的元组。 所以我说这只是似乎比我看到直至现在的解决方案“更好的”过载。 任何人有想法,以进一步削减该代码? 请注意,这是一个编译器的杀手! 唯一一个可以编译,这是“铛3.2” ...英特尔编译器13.1没有得到专业化,不断告诉“C ++标准不支持哈希布拉布拉”。 而且我们不需要谈论原始的Microsoft编译器做我们。

顺便说一句,我的解决方案支持递归元组类似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);
        }
    };
}

Answer 1:

很明显,一旦你已经看到了:

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);
}


文章来源: My std::hash for std::tuples… Any improvements? [closed]