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
};
我将 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
};