在字典式地比较std::vector<double>
向量时,是否有方法更改预定义<=
和<
的精度?
我在代码中的许多地方对std::vector<double>
矢量进行字典式比较,第一个分量(接近0(的比例与其他分量(在-700和700之间(的比例不同。我希望精度为1e-6,即对于两个分量a
和b
,如果abs(a-b)<=1e-6
,则我们考虑a=b
,其中a
、b
是double
。
由于我在代码中的许多地方使用了<=
和<
,因此定义一个新函数来替换<=
和<
来在向量之间进行比较是有风险的(我跳过了一些向量(,所以我想知道是否可以更改<=
和<
的精度,以便此更改将直接应用于所有比较。
我有一个向量的例子:A=(-2.6666666666666936, 33497.435897435964, -300.51282051282101)
,B=(-2.6666666666666914, 17403.589743589808, -251.28205128205173)
,使用<=
的结果是,由于第一个分量,A<=B
,但在我的情况下,第一个分量等于(ε=1e-6(,所以A>B
。
没有好的方法可以更改运算符的精度。
我建议您编写自己的函数,对两个向量进行迭代并直接进行比较。类似于:
bool approxLessThan(
const std::vector<double>& a,
const std::vector<double>& b,
double tolerance) {
// feel free to handle this differently
assert(a.size() == b.size());
for (size_t i =0; i < a.size(); i++) {
double dif = a[i] - b[i];
if (std::abs(dif) > tolerance)
return dif < 0.0; // change this to <= as needed
}
return false; // The vectors are "equal"
}
如果需要,可以将其展开以处理不同大小的矢量。