gpt4 book ai didi

c++ - 通过unordered_set中的哈希值查找哪个元素为累加类型

转载 作者:行者123 更新时间:2023-12-03 07:09:43 28 4
gpt4 key购买 nike

例如,我有一个像这样的类:

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_nameBar的元素,但是我不知道如何写, std::set::find函数将 Foo类型作为参数,而不是 std::string
那我怎么写类似 my_set.find("Bar")的东西呢?

最佳答案

为了做类似my_set.find("Bar")的事情,您需要做两件事:

  • 您的C++编译器必须支持C++ 20标准,并且在编译代码时必须启用C++ 20。
  • 将您的比较和哈希类实现为“透明”。归结为实现重载,该重载除了对类进行哈希处理之外还对std::string(或const char *)进行哈希处理,并在类和字符串之间实现比较运算符。

  • 有关更多信息,请 see the reference for std::unordered_set::find
    在C++ 20之前,您唯一的选择是构造类的临时实例,并将其传递给 find而不是字符串(可以通过实现适当的构造函数并依靠隐式转换来完成)。

    关于c++ - 通过unordered_set中的哈希值查找哪个元素为累加类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64590382/

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