繁体   English   中英

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

[英]How does upper_bound work with custom object type val?

我目前正在 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));
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM