利用 std::hash 对组合进行 hash

利用 std::hash 对组合进行 hash

主要是记录下 std::hash 的用法,结合 lambda 表达式,感觉这样挺方便的,虽然现在看起来还是挺晕

例子 [LEETCODE49]

Description

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

Solution

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        auto GetHash=[f=hash<int>{}] (const array<int,26>& arr)->size_t {
            return accumulate(arr.begin(),arr.end(),0u,[&](size_t acc,int num){return (acc<<1)^f(num);});
        };
        unordered_map<array<int,26>, vector<string>, decltype(GetHash)> mp(0,GetHash);
        for(string& str:strs)
        {
            array<int,26> counts{};
            int length=str.length();
            for(int i=0;i<length;i++)
                counts[str[i]-'a']++;
            mp[counts].emplace_back(str);
        }
        vector<vector<string>> ans;
        for(auto i:mp) ans.emplace_back(i.second);
        return ans;
    }
};
原文地址:https://www.cnblogs.com/mollnn/p/14138438.html