0

我需要在传入函数指针的情况下使用 unordered_map,是否有任何解决方法可以使以下代码工作?


struct eq_fun
{
    bool operator()(void* s1, const void* s2) const
    {
        return ( _cmp_fn((void*)s1,(void*)s2) == 0 );
    }
    int (*_cmp_fn)(void*, void*);
    eq_fun(int (*fn)(void*, void*)):_cmp_fn(fn){}
};

struct hash_fun
{
    size_t operator()(const void *p) const
    {
        return _hash_fn(p);
    }
    int (*_hash_fn)(const void*);
    hash_fun(int (*fn)(const void*)):_hash_fn(fn){}
};

unordered_map<void*,void*> *create(int (*h)(const void*),int (*cmp)(void*,void*))
{
    return new unordered_map<void*,void*,hash_fun(h),eq_fun(cmp)>;
}

4

1 回答 1

1

当然

unordered_map<void*,void*,hash_fun, eq_fun> *create(int (*h)(const void*),int (*cmp)(void*,void*))
{
    return new unordered_map<void*,void*,hash_fun,eq_fun>(0, hash_fun(h), eq_fun(cmp));
}

似乎 unordered_map 没有仅采用哈希函数和等式函数的构造函数,因此我添加了值为 0 的最小桶数参数。在任何情况下,重要的一点是您分别构造函数对象并将这些对象传递给 unordered_map 构造函数。

于 2013-10-07T09:32:12.890 回答