在无序映射中使用对作为键
尝试声明键为对的 unordered_map 时 (Vote =pair
Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'
出现此错误是因为 unordered_map 依赖于针对其键类型定制的哈希函数。由于默认的哈希函数不适用于对,因此您必须提供自定义哈希函数。
例如,考虑以下自定义哈希函数(pair_hash):
struct pair_hash { template <class T1, class T2> std::size_t operator() (const std::pair<T1, T2> &p) const { auto h1 = std::hash<T1>{}(p.first); auto h2 = std::hash<T2>{}(p.second); return h1 ^ h2; } };
此哈希函数使用 XOR 运算符组合该对组件的哈希值。要使用它,请按如下方式修改 unordered_map 声明:
using Vote = std::pair<std::string, std::string>; using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
此方法允许通过提供合适的哈希函数来创建以对作为键的无序映射。然而,值得注意的是,这种简单的实现可能无法表现出最佳的哈希属性,请考虑探索 Boost 的 hash_combine 函数或设置 hash_value 以获得改进的结果。
以上是如何在 C 中使用对作为无序映射中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!