【发布时间】:2017-02-03 18:43:49
【问题描述】:
我在为对象定义哈希和相等函数时遇到了一些麻烦。我将这些对象用作std::unordered_map 的键。我有两个键 aKey 和 unaccessibleKey。我可以向aKey 添加一个等式运算符重载,但我不能向unaccessibleKey 添加一个等式运算符重载,因为它“无法访问”。我已尝试执行以下操作,但我不确定我是否对所有内容都使用了正确的语法,而且我不知道如何为unaccessibleKey 定义相等函数。这是我尝试过的:
struct aKeyHash
{
std::size_t operator()(const aKey& k) const
{
return k.getnonconstmem()->nonconstfunc();
};
}
struct unaccessibleKeyHash
{
std::size_t operator()(const unaccessibleKey& k) const
{
return k.noncostmem;
};
}
bool UnaccessibleEqualityFunction(const unaccessibleKey& p1, const unaccessibleKey& p2)
{???} //i dont know how to define this
std::unordered_map<aKey, std::unordered_map<unaccessibleKey, aValue, unaccessibleKeyHash, unaccessibleEqualityFunctions>, aKeyHash>
我这样做对吗(除了我不知道如何定义的功能)?附带说明一下,当我尝试调用 k.getnonconstmem()->nonconstfunction() 时出现错误。
可以使用 unaccessibleKey::nonconstmem 作为键本身,因为它实际上是一个散列 int,但这可能会导致以后出现我不想处理的复杂情况。
所以我的问题是:1. 我是否有正确的哈希语法,2. 我如何定义相等函数,3. 为什么我会在 const/nonconst 混合时得到错误?
【问题讨论】:
-
什么是“不可访问”键?是私人领域吗?如果是这样,您可能会发现this 问题很有用。
-
你的伪代码遗漏了太多重要的细节。请发minimal reproducible example。