我创建了 std::unordered_map<CGPoint, unsigned int>
,显然,要使它工作,我应该为它编写哈希函数:
namespace std {
template<> struct hash<CGPoint> {
inline size_t operator()(const CGPoint & v) const {
size_t seed = 0;
::hash_combine(seed, v.x);
::hash_combine(seed, v.y);
return seed;
}
};
};
但它没有编译,我发现有一个地方,应该定义相等运算符 . 所以我将以下代码写入模板结构中 .
friend bool operator==(const CGPoint& p1, const CGPoint& p2) {
return (p1.x == p2.x) && (p1.y == p2.y);
}
但它不断抛出异常:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c / v1 / functional:659:21:二进制表达式的无效操作数('const CGPoint'和'const CGPoint')
和:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c / v1 / __ hash_table:1993:32:没有匹配函数来调用'key_equal'类型的对象(又名'std ::' __1 :: __ unordered_map_equal,std :: __ 1 :: equal_to,true>')
很可能我错过了一些非常简单的东西,但是因为它经常发生,我无法得到它 . 提前致谢 .
1 回答
operator==
应该是顶级功能,而不是朋友功能 .以下将编译: