c++ - 在结构内部的 TR1 unordered_map 中定义哈希函数

标签 c++ hash tr1 unordered-map

根据 this ,可以像这样在 TR1 unordered_map 中定义相等函数:

#include <tr1/unordered_map>
using namespace std;
using namespace std::tr1;
struct foo{
    ...
    bool operator==(const foo& b) const{
        return ..;
    }
};

unordered_map<foo,int> map;

是否可以用同样的方式定义哈希函数?

最佳答案

如果您想更改默认散列(或者更常见的是,为当前不受支持的类型提供散列),您可以提供 std::tr1::hash<T> 的特化对于您的 key 类型:

namespace std { 
namespace tr1 { 
    template<>
    struct hash<typename my_key_type> {
        std::size_t operator()(my_key_type const &key) {
            return whatever;
        }
    };
}
}

请注意,为用户定义的类型专门化现有模板是罕见情况之一,您特别允许在 namespace std 中编写代码.

关于c++ - 在结构内部的 TR1 unordered_map 中定义哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434484/

相关文章:

C++ STL 容器中的 NULL 指针

c++ - 仅覆盖 C++ 映射迭代器取消引用

c++ - 如何循环访问具有两个节点的链接节点

C 哈希表大小问题

visual-studio-2010 - tr1:boost vs vs2010,使用没有命名空间的shared_ptr

c++ - 为什么 cmath 不使用模板和/或重载

c# - 如何阻止应用程序打开

c++ - 如何将基于迭代器的 for 循环重写为基于范围的循环 (C++11)

perl - 如何用 perl 写得更好

mysql - 在 MySQL 中存储 SHA1 哈希值