【发布时间】:2014-05-15 10:27:05
【问题描述】:
这不起作用:
struct A {
int x1;
int x2;
};
int main() {
int A::*p1 = &A::x1;
set<int A::*> s;
s.insert( p1 ); // compile error: No operator<
unordered_set<int A::*> us;
us.insert( p1 ); // compile error: No hash function
}
我必须提供比较函数(set)或哈希函数(unordered_set)。到目前为止,我想出的唯一方法是检查成员指针下的原始字节:
struct XLess {
bool operator()( int A::* a, int A::*b ){
return memcmp( &a, &b, sizeof(a) ) < 0;
}
};
set<int A::*, XLess> s; // now appears to work
这是创建集合的可靠方法吗?它取决于由相同字节表示的相同指针。有没有更好的解决方案?
【问题讨论】:
-
假设你想要它的成员指针,
set是否重要,以至于vector不会削减它? -
@sp2danny 是的,这将是一种可能的解决方法。如果没有更好的结果,我会考虑。谢谢。
标签: c++ pointer-to-member