【问题标题】:Custom equality compartor in unordered_map with initialization parametersunordered_map 中带有初始化参数的自定义相等比较器
【发布时间】:2021-12-21 10:24:33
【问题描述】:

我正在使用带有自定义相等比较器类的 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 传递给映射,以便使用此helper 创建KeyCompare 对象。这样的事情可能吗?如果绝对必要,我可以使用一些全局变量,但我真的很想避免这种情况。

【问题讨论】:

标签: c++ unordered-map


【解决方案1】:

由于您的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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 2013-09-14
相关资源
最近更新 更多