【发布时间】:2019-09-17 14:04:57
【问题描述】:
假设我有一个基类
struct Base {
int x;
};
而且我知道有一个派生自Base 的Derived 类,但目前我无法获得它的定义(它存在于下游模块中)。
现在我有一个unordered_set<Base*>,它将存储Base 和Derived 对象的混合。如果我没有指定自定义散列函数,这个 unordered_set 是否可以正常工作(即按元素的实际类型散列元素,以便具有相同 x 但在某些其他派生字段中不同的两个 Derived 对象被视为不同)?
假设我确实需要一个自定义散列函数,因为我还没有 Derived 的定义,我希望将我的散列函数写为 Base 的虚拟成员函数,以便 Derived 可以简单当unordered_set 调用它时,覆盖该函数以执行它自己的哈希。这可能吗?或者对于此类问题是否有其他首选/已建立的解决方案?
【问题讨论】:
-
这是XY problem吗?
-
我刚刚编辑了我的问题,希望现在更清楚......我确实想要一个有效的 unordered_set,尽管虚拟哈希函数可能不是正确的解决方案。
标签: c++ hash unordered-set