gpt4 book ai didi

c++ - 内部可哈希类声明失败

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

我想在外部类内部有一个内部类,并让外部类将该内部类放入哈希表中。实现这一目标的明智方法是什么?我的尝试:

#include <unordered_set>

class Outer {
public:
struct Inner {
int x;
};

std::unordered_set<Outer::Inner> inners;
};

namespace std {
template<> struct hash<Outer::Inner> {
size_t operator()(const Outer::Inner& o) {
return 42;
}
};
}

int main() {
Outer outer;
std::unordered_set<Outer::Inner> inners;
return 0;
}

不起作用,因为 std::hash 特化不是由我尝试声明类 Outer 的 unordered_set 字段的领带定义的。

最佳答案

不确定这是否算作“理智”,但这是我想到的第一个想法。

您可以创建一个自定义哈希类,将 operator() 调用转发给目标对象的成员函数(.hash() 在下面的实现中)。

#include <cstddef>
#include <unordered_set>

struct member_hash {
template <typename T> std::size_t operator()(const T &o) const {
return o.hash();
}
};

class Outer {
public:
struct Inner {
int x;
std::size_t hash() const {
return 42;
}
};

std::unordered_set<Outer::Inner, member_hash> inners;
};

int main() {
Outer outer;
std::unordered_set<Outer::Inner, member_hash> inners;
return 0;
}

另请注意,哈希类的 operator() 应该是 const,至少在我的 GCC 上它拒绝以其他方式工作。

关于c++ - 内部可哈希类声明失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366680/

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