使用unordered_set自定义哈希并查找

时间:2019-01-20 10:19:25

标签: stl find c++17 hashset unordered-set

我为unordered_set提供了一个哈希函数,我想使用set的查找功能,但出现错误。如何使用自定义哈希函数使用set的查找功能?

我想将一对存储在无序集中,为此,我有一个简单的哈希函数,只是尝试使用查找功能,这会引发错误。错误如下:

solution.cpp:在成员函数anagramMappings中 第22行:字符33:错误:没有匹配函数可调用'std :: unordered_set,解决方案:: SimpleHash> :: find(__ gnu_cxx :: __ alloc_traits,int> :: value_type&)              它= mySet.find(A [i]);                                  ^

struct SimpleHash {
    size_t operator()(const std::pair<int, int>& p) const {
    return hash<int>()(p.first) ^ hash<int>()(p.second);
    }
};

vector<int> anagramMappings(vector<int>& A, vector<int>& B) {

    vector<int> res;
    unordered_set<pair<int,int>, SimpleHash> mySet;
    unordered_set<pair<int,int>, SimpleHash>::iterator it;

    for(int i=0; i < B.size(); i++) {
        mySet.insert(make_pair(B[i],i));
    }

    for(int i=0; i<A.size(); i++) {

        it = mySet.find(A[i]);
        if(it != mySet.end()) {
            res.push_back(it->second);
        }
    }

    // for(it = mySet.begin(); it != mySet.end(); it++) {
    //     cout << it->first << " " << it->second << endl;
    // }

    return res;
}

使用mySet.find(key)时,它应该返回对的第一个元素

1 个答案:

答案 0 :(得分:0)

unordered_set<T>::find()希望使用T作为自变量-在这种情况下为pair<int, int>。您正在传递一个int

您可能想考虑使用std::unordered_map,因为您似乎想将一个int视为查找关键字,将另一个services.Configure<ForwardedHeadersOptions>(options => { options.KnownProxies.Add(IPAddress.Parse("x.x.x.x")); options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; }); app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseAuthentication(); 视为与该关键字关联的值。

相关问题