gpt4 book ai didi

c++ - 派生类的散列

转载 作者:行者123 更新时间:2023-11-30 04:54:31 25 4
gpt4 key购买 nike

我有一个案例,我在不更改任何数据的情况下派生一个类,因此保留其父级的哈希函数就可以了。然而,这并不是开箱即用的:

#include <unordered_set>

struct A { size_t value; };
struct B : public A {};

namespace std
{
template<>
struct hash<A>
{
typedef A argument_type;
typedef size_t result_type;
result_type operator()(argument_type const& a) const noexcept { return a.value; }
};
}

int main()
{
std::unordered_set<A> a_set; // works fine
std::unordered_set<B> b_set; // error: hash<B> not found
}

有没有一种简单的方法可以在不显式实现 hash<B> 的情况下完成这项工作? ?

最佳答案

这个怎么样:

template <class T,
typename std::enable_if<std::is_base_of<A, T>::value, bool>::type = true // just for the hard error
> using hash = std::hash<A>;

std::unordered_set<A> a_set;
std::unordered_set<B, hash<B>> b_set;

或者你可以通过 std::hash<A>直接到B设置为:

std::unordered_set<B, hash<A>> b_set;

关于c++ - 派生类的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53549420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com