我正在搞乱unordered_map
类模板,我想为我的班级写一个自定义的哈希。它的文档提到为内在类型提供了默认的散列函数。所以,如果你声明:
std::tr1::unordered_map<std::string, int> foo;
您自动为您定义了一个哈希。
如果你想要一个自定义哈希函数,这里有一个关于如何提供仿函数的好例子。
但是,如果我有一个具有std::string
成员的复杂类,我想将其用作插入/删除unordered_map
的键,该怎么办?我不想重写我自己的哈希。我想利用已为std::string
类型编写的内容。
答案 0 :(得分:1)
默认哈希仿函数由std::hash<T>
提供,返回size_t
。
因此,您可以组合该类的几个成员的哈希,例如通过计算(std::hash<T>()(a) + prime * (std::hash<T>()(b) + prime * std::hash<T>()(c)))
。