如何允许STL实现获取我的自定义类型?在MSVC上,有一个类std::tr1::hash
,我可以通过使用来部分专门化
namespace std { namespace tr1 { template <> struct hash{ ... }; } }
但这是推荐的方式吗?此外,这是否也适用于GCC的实施?因为boost::hash
,它足以提供免费功能size_t hash_value (const MyType&)
,是否有类似的TR1实现?
我试图找出使用无序关联容器(也使用GCC,正如OP所要求的)执行此操作的确切语法并点击此问题.
不幸的是,它没有达到我想要的细节水平.通过查看gcc标头如何实现标准哈希函数,我得到了它的工作.鉴于在网络上缺乏示例(至少在撰写本文时),我认为这将是发布我自己的示例(我可以确认与GCC合作)的好地方:
namespace std { namespace tr1 { template <> struct hash: public unary_function { size_t operator()(const MyType& v) const { return /* my hash algorithm */; } }; }}
(注意这里有两个命名空间 - 这只是我对折叠嵌套命名空间的约定)