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