我正在尝试重载小于运算符,以便使用 vector::lower_bound 在 ClassA 类型的 vector 中找到最接近/最近的数字到给定的 double 。 如果我给它 2 个 ClassA 实例进行比较但不能与不同类型进行比较,我可以让它工作。
我有以下代码
double ClassB::findNearest()
{
std::vector<ClassA> vec;
std::vector<ClassA>::iterator low;
low = std::lower_bound(vec.begin(),vec.end(), 20.0);
if (low == vec.end())
{
return -1;
}
return *low;
}
-------------------------------------------- ------
class ClassA
{
public:
ClassA(void);
virtual ~ClassA(void);
double one;
double two;
inline friend bool operator< ( const ClassA &cC1, const double &cC2)
{
return cC1.one < cC2 ;
};
};
我得到错误: 二进制“<”:未找到采用“const double”类型的左侧操作数的运算符(或没有可接受的转换)
...我不知道为什么当我从右到左重载运算符时。为什么我需要走另一条路?
非常感谢
亚历克斯
最佳答案
std::lower_bound
正在寻找:bool operator< (const double& cC1, const ClassA& cC2)
您应该简单地在 ClassA
中定义 你会变成金子的:
bool operator< (const double& cC1, const ClassA& cC2)
{
return cC1 < cC2.one;
}
编辑: leemes是的,这需要在您的 Class A
之外定义所以它可以访问 std::lower_bound
.
关于c++ - 重载小于不同类型的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131092/