c++ - 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 的元素。如何?
解决方案
您的程序具有未定义的行为。您传递给上限的范围必须按<
(对于三个参数重载)进行排序。
推荐阅读
- java - 如何使用迭代器对象访问方法 GetEmployeeDetails()
- python - 如何将字典转换为键列表,并由值给出重复计数?
- python-3.x - 公式返回“int”对象不可迭代
- python - 在 Python 中使用 PyAudio 和 Tkinter 进行多处理无法在 Mac OS X 上运行
- tensorflow - 简单图像的posenet失败且速度太慢
- django - 如何将 2 种字段类型处理到一个模型字段?
- c# - 在接口中声明一个属性,继承者可以访问,但实例化者不能访问
- mongodb - 谁能解决这个 MongoDB 语法错误:非法字符 @(shell):1:19?
- android - 从 Android 后台请求位置更新?
- html - 将搜索表单移到中心