我试图通过散列一些节点指针来加速特定的链表操作。这是我正在使用的代码:
unordered_set< typename list< int >::iterator > myhashset;
在 Visual Studio 2012 中,我收到“错误 C2338:C++ 标准不提供这种类型的散列”,因为编译器不知道如何散列迭代器。因此,我需要为列表迭代器实现自己的哈希函数,如下所示:
struct X{int i,j,k;};
struct hash_X{
size_t operator()(const X &x) const{
return hash<int>()(x.i) ^ hash<int>()(x.j) ^ hash<int>()(x.k);
}
};
(维基百科参考)
我无法确定迭代器的哪些成员保证唯一性(因此,我想要散列的成员)。另一个担忧是这些成员可能是私人的。
想到的一个解决方案是重新实现和 list::iterator,但这似乎是一种 hack,并且引入了更多需要维护的代码。