unordered_map 中带有初始化参数的自定义相等比较器

Custom equality compartor in unordered_map with initialization parameters

我将 std::unordered_map 与自定义相等比较器 class 一起使用,如下所示:

class KeyCompare {
private:
    HelperClass* helper;

public:
    KeyCompare(HelperClass* helper): helper(helper) {}
    
    bool operator()(const Key& key1, const Key& key2) const {
        return helper->doStuff(key1, key2);
    }
}

在我的代码中的某个时刻,我像这样初始化我的地图:

HelperClass helper;
std::unordered_map<Key, Value, Hasher, KeyCompare> map;

我想将 helper 传递给地图,以便使用此 helper 创建 KeyCompare 个对象。这样的事情可能吗?如果绝对必要,我可以使用一些全局变量,但我真的很想避免这种情况。

因为你的 KeyCompare 需要一个助手,所以它不是默认可构造的。因此,您必须在构造 unordered_map 时为它提供一个实例。

示例:

HelperClass helper;

std::unordered_map<Key, Value, Hasher, KeyCompare> map{
    1,                   // bucket count
    Hasher{},            // hasher instance
    KeyCompare{&helper}  // your KeyCompare with the helper
};

Demo