首页 > 解决方案 > unordered_map 中带有初始化参数的自定义相等比较器

问题描述

我正在使用带有自定义相等比较器类的 std::unordered_map ,如下所示:

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给地图,以便KeyCompare使用 this 创建对象helper。这样的事情可能吗?如果绝对必要,我可以使用一些全局变量,但我真的很想避免这种情况。

标签: c++unordered-map

解决方案


由于您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
};

演示


推荐阅读