c++ - 上界/下界的比较函数

标签 c++ algorithm stl

我想在排序后的 vector 中找到第一个字段小于某个值 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;
    }
};

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

关于c++ - 上界/下界的比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869593/

相关文章:

java - 在多个 jni 调用中保持某种 c++ 对象存活

php - 如何让C++应用程序从PHP接收数据?

c++ - 在cpp中将一维数组快速复制到三维数组

algorithm - 如何在不丢失现有路径的情况下从有向图中删除顶点?

c++ - STL 中的 find() 与 binary_search()

同一解决方案中的 C#/C++ - DllImport 未找到 DLL

algorithm - 如何找到有向图的最大无环子图的2-近似解?

c++ - C++ 映射可以包含指向我的任意类的指针吗?

c++ - 如何将 `std::time_t` 变量中的时差表示为天、小时、分钟和秒?

algorithm - 占用边的最短路径查找算法