[英]find by hash value from an unordered_set which element is cumtomed type
例如我有一个这样的类:
struct Foo {
std::string unique_name;
unsigned id;
struct HashFunc {
size_t operator()(const Foo &foo) const {
return std::hash<std::string>()(foo.unique_name);
}
};
struct KeyEqual {
bool operator()(const Foo &lhs, const Foo &rhs) const {
return lhs.unique_name == rhs.unique_name;
}
};
};
如您所见,我希望字段unique_name
是哈希键。
然后我将一些Foo
放在unordered_set
:
std::unordered_set<Foo, Foo::HashFunc, Foo::KeyEqual> my_set {{"Foo", 1}, {"Bar", 2}};
现在我想找到unique_name
是Bar
的元素,但我不知道怎么写, std::set::find
函数将类型Foo
作为参数,而不是std::string
。
那么我怎样才能写出类似my_set.find("Bar")
呢?
为了做类似my_set.find("Bar")
事情,你需要做两件事:
您的 C++ 编译器必须支持 C++20 标准,并且在编译代码时必须启用 C++20。
将您的比较和哈希类实现为“透明”。 这归结为实现除类之外散列std::string
(或const char *
)的重载,并在类和字符串之间实现比较运算符。
有关更多信息, 请参阅std::unordered_set::find
的参考。
在 C++20 之前,您唯一的选择是构造类的临时实例并将其传递给find
而不是字符串(这可以通过实现适当的构造函数并依赖隐式转换来完成)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.