【发布时间】:2018-03-16 19:06:46
【问题描述】:
我正在尝试为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。我觉得我错过了一些简单的东西,但我无法弄清楚。
【问题讨论】:
-
你确定你在编译 C++17 吗?我想 C++14 仍然是许多编译器的默认设置。
-
@patatahooligan
-std=c++1z是当前编译器标志。 -
@Galik 很棒。这会导致一个烦人的错误。我将使用建议的修复更新我的帖子(不包括哈希修复 ofc)
标签: c++ hash c++17 string-view