2

独自のハッシュ関数を定義しようとして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 にstd::hashよると、をサポートする必要がありstd::string_viewます。シンプルなものが欠けているような気がしますが、理解できません。

4

2 に答える 2