使用键对的无序映射编译错误
尝试创建键为对的无序映射时,您可能会遇到以下错误:
Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'
出现此错误是因为无序映射需要为其定义哈希函数关键类型。而哈希
解决方案:提供自定义哈希函数
要解决此问题,您需要为您的密钥对类型定义自定义哈希函数。下面是一个示例实现:
struct pair_hash { template<class T1, class T2> size_t operator()(const pair<T1, T2>& p) const { auto h1 = hash<T1>()(p.first); auto h2 = hash<T2>()(p.second); return h1 ^ h2; } };
此哈希函数使用按位 XOR (^) 组合该对各个组件的哈希值。
使用自定义哈希函数
定义了哈希函数后,您可以使用它来创建一个无序映射,其中键对为如下:
using Vote = pair<string, string>; using Unordered_map = unordered_map<Vote, int, pair_hash>; Unordered_map um;
通过此修改,将不再出现编译错误,并且您将能够按预期使用无序映射。
以上是如何解决使用 Pair Keys 的无序映射编译错误?的详细内容。更多信息请关注PHP中文网其他相关文章!