c – upper_bound / lower_bound的比较功能

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

 float x;
 std::vector< MyClass >::iterator last = std::upper_bound(myClass.begin(),myClass.end(),x);
你有什么功能传递给排序算法?您应该能够使用相同的一个用于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;
    }
};

你可以看到,这是很长的路要走.

翻译自:https://stackoverflow.com/questions/869593/compare-function-for-upper-bound-lower-bound

转载注明原文:c – upper_bound / lower_bound的比较功能