查找可能不返回任何结果的最佳匹配的算法
algorithm to find best match that may return none
我有一些输入可能暂时不可用,并且有一个相关的错误。
struct sensorVal
{
bool available;
double error;
double val;
bool betterThan(const sensorVal* that) const;
}
我正在寻找一个算法,将找到最好的可用的输入。到目前为止,我最好的尝试是使用min_element
如下:
bool sensorVal::betterThan(const sensorVal& that) const
{
if (available)
{
if (that.available)
return (error < that.error);
return true;
}
return false;
}
bool betterThan(const sensorVal& lhs, const sensorVal& rhs)
{
return lhs.betterThan(rhs);
}
std::vector<sensorVal>::const_iterator
find_best(const std::vector<sensorVal>& inputs)
{
std::vector<sensorVal>::const_iterator best;
best = min_element(inputs.begin(), inputs.end(), betterThan);
if (best->available)
return best;
return inputs.end();
}
除了所有输入都被标记为不可用之外,这很好地工作。在本例中,best设置为inputs.begin()
,然后我需要测试它是否可用。
我希望最好设置为inputs.end()
,这在我的代码中已经满足了。
是否存在一种算法可以找到最佳匹配,并且可以返回没有合适的成员?或者重新定义我的测试,以便将best设置为inputs.end()
。
谢谢
也许你只是想让它看起来更好一点?
best = min_element(inputs.begin(), inputs.end(), betterThan);
return best->available ? best : inputs.end();
您可以使用std::accumulate
代替,但我认为您已有的解决方案更好。
struct best {
std::vector<sensorVal>::const_iterator end;
explicit best(std::vector<sensorVal>::const_iterator end) : end(end){}
std::vector<sensorVal>::const_iterator operator()(std::vector<sensorVal>::const_iterator l, std::vector<sensorVal>::const_iterator r) {
return (r->available() && (l == end() || r->error < l->error)) ? r : l
}
};
std::vector<sensorVal>::const_iterator
find_best(const std::vector<sensorVal>& inputs)
{
return std::accumulate(inputs.begin(), inputs.end(), inputs.end(), best(inputs.end());
}
也许您可以使用std::partition()将向量分类为可用和不可用的输入。然后使用min_element在可用子集中查找最佳。
相关文章:
- 打印所有儿童树元素的最佳算法?
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 从整数向量向量搜索整数向量的最佳算法
- 绘制线条的最佳算法
- 为一群追逐兔子的狐狸创建蜂群算法的最佳方法
- 找到多组对象的最佳匹配的算法
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 比较阵列相似性的最佳比较算法是什么?
- 最佳页面替换算法
- 在C/C 中实现实时最佳拟合内存分配算法
- 找出所有给定数组中公共元素的最佳算法
- 将集合与集合进行比较的最佳算法
- 哪种算法是求所有子阵列之和的最佳算法
- 删除 2 个给定索引之间的元素的最佳算法
- 合并索引对的最佳算法
- 随机生成一个能被N整除的数的最佳算法
- 城市环境中特征检测的最佳算法- OpenCV
- Rational函数级数展开的最佳算法
- 检查矢量是否排序的最佳算法