gpt4 book ai didi

c++ - 如何散列 std::string_view?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:04 26 4
gpt4 key购买 nike

我正在尝试为 std::unordered_map 定义我自己的散列函数,我想散列结构中的一个字段,该结构应该是键。下面的代码是我所拥有的代码的简化版本:

struct TestStruct {
char a[64];
char b[64];
}

struct my_eq {
bool operator()(const TestStruct& test_1, const TestStruct& test_2) const {
return !strcmp(test_1.a, test_2.a) && !strcmp(test_1.b, test_2.b);
}
};

struct my_hash {
unsigned long operator()(const TestStruct& test) const {
return std::hash<std::string_view>(std::string_view(test.a));
}
};
std::unordered_map<TestStruct, int, my_hash,my_eq> map;

我得到的错误是:

no matching function for call to ‘std::hash<std::basic_string_view<char> >::hash(std::string_view&)

根据cppreference on std::hash散列函数应支持 std::string_view。我觉得我缺少一些简单的东西,但我无法弄清楚。

最佳答案

您使用的 std::hash 有误。 std::hash 是一个提供散列对象的 operator() 的类。您正试图将对象传递给它的构造函数,这不起作用,因为它只有一个默认的构造函数。您的 operator() 也需要标记为 const。我们将所有这些放在一起,我们得到:

struct my_hash {
unsigned long operator()(const TestStruct& test) const {
return std::hash<std::string_view>()(std::string_view(test.a));
}
};

关于c++ - 如何散列 std::string_view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327912/

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