重载ObjC结构为C ++无序容器哈希支持

时间:2016-07-10 23:28:22

标签: xcode struct operator-overloading objective-c++

我已经创建了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;')

我很可能会错过一些非常简单的东西,但是因为它经常发生,我无法得到它。提前谢谢。

1 个答案:

答案 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==