首页 > 解决方案 > upper_bound 如何与自定义对象类型 val 一起工作?

问题描述

我目前正在学习 c++ 中的上界算法,如果第三个参数 val 是整数类型,事情就很容易了。但是,我遇到了一个自定义类型 val 的示例,事情变得有些混乱。示例代码。

class Pocket
{
public:
    int value;
    Pocket(int value) : value(value) {};
    bool operator < (const Pocket& right) const
    {
        return value < right.value;
    }

    int getValue() const
    {
        return value;
    }
};

bool Compare(const Pocket &left, const Pocket &right)
{
    return int (left.getValue() > right.getValue());
}

void main()
{
    int a[] = { 3, 9, 2, 4, 4 };
    std::deque<Pocket> d(a, a + 5);
    std::sort(d.begin(), d.end(), Compare);
    std::deque<Pocket>::iterator it = std::upper_bound(d.begin(), d.end(), Pocket(2));
}

生成的迭代器指向值为 9 的元素。如何?

标签: c++algorithmc++17

解决方案


您的程序具有未定义的行为。您传递给上限的范围必须按<(对于三个参数重载)进行排序。


推荐阅读