【发布时间】:2013-06-21 08:29:38
【问题描述】:
我试图通过散列一些节点指针来加速特定的链表操作。这是我正在使用的代码:
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,并且引入了更多需要维护的代码。
【问题讨论】:
-
那不是迭代器!你的未来,笼罩着的是。迭代器,困惑的是。散列 [iterators] 导致愤怒,愤怒导致仇恨,仇恨导致 gdb。
-
@kfsone:我也不是特别喜欢迭代器(在实现之后)。有时我会怀念编写好旧 C 的日子。不过,我看不到 C++ 中迭代器的任何替代品。
-
选项 a) 我关闭了我的 stackoverflow 帐户,选项 b) 我回复“与 (*youIt) 合作”。