1. 程式人生 > 實用技巧 >利用 std::hash 對組合進行 hash

利用 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;
    }
};