小编典典

比较函数的上限/下限

algorithm

我想在排序向量中找到第一项,该向量的字段小于某个值x。
我需要提供一个比较函数,将MyClass中的“ x”与内部值进行比较,但是我无法计算出函数声明。
我不能简单地重载’<’,但是当args为’&MyClass’和’float’时该怎么做?

 float x;
 std::vector< MyClass >::iterator last = std::upper_bound(myClass.begin(),myClass.end(),x);

阅读 439

收藏
2020-07-28

共1个答案

小编典典

您将什么功能传递给了排序算法?您应该能够对upper_bound和lower_bound使用相同的参数。

进行比较的最简单方法是创建一个虚拟对象,并将关键字段设置为您的搜索值。这样,比较将始终在相似对象之间进行。

编辑: 如果由于某种原因无法获得具有正确比较值的虚拟对象,则可以创建比较函子。函子可以为operator()提供三个重载:

struct MyClassLessThan
{
    bool operator() (const MyClass & left, const MyClass & right)
    {
        return left.key < right.key;
    }
    bool operator() (const MyClass & left, float right)
    {
        return left.key < right;
    }
    bool operator() (float left, const MyClass & right)
    {
        return left < right.key;
    }
};

如您所见,这是很长的路要走。

2020-07-28