c++ - 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
。这样的事情可能吗?如果绝对必要,我可以使用一些全局变量,但我真的很想避免这种情况。
解决方案
由于您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
};
推荐阅读
- r - 是否可以从使用 `facet_wrap` 的 `ggplots` 中获取`轴中断`?
- javascript - 动态地将变量名称添加到 json 数据中
- google-analytics - 谷歌分析在 4 月 25 日停止了对某些页面的工作
- react-native - 为什么使用 AsyncStorage.setItem 没有问题?
- javascript - 在搜索和显示结果上显示相同的按钮
- javascript - 类不是 id 的倒数计时器
- angularjs - 如何使用嵌套的 ng-repeat 在 ng-repeat dynamicall 中设置数据?
- java - Java多线程事件处理
- android - 从 json 中检索对象
- python - JMeter 和 Python 瓶 - 不关闭套接字