我已经创建了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 /功能: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&gt;')
我很可能会错过一些非常简单的东西,但是因为它经常发生,我无法得到它。提前谢谢。
答案 0 :(得分:2)
set.seed(101)
dd <- data.frame(x=runif(100,0,10))
dd$y <- rnorm(100,mean=1+2*dd$x,sd=0.5)
m1 <- lm(y~I(x-2)+0,dd)
plot(y~x,data=dd,ylim=c(0,25),las=1,bty="l")
b <- coef(m1)[1]
curve(b*(x-2),add=TRUE,col=2)
points(2,0,pch=16)
应该是顶级功能,而不是朋友功能。
以下将编译:
operator==