upper_bound如何与自定义对象类型val一起使用?

时间:2020-09-22 07:52:57

标签: c++ algorithm c++17

我目前正在学习c ++中的upper_bound算法,如果第三个参数val的类型为Integer,事情就很容易了。但是,我遇到了一个带有自定义类型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));
}

生成的迭代器 it 将指向值为9的元素。

1 个答案:

答案 0 :(得分:2)

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