在未排序向量上的lower_bound / upper_bound

时间:2018-08-02 08:06:51

标签: c++ stl

const std::vector<int> v = {5, 7, 3, 6, 5, 4, 7, 8, 5, 6};

auto low = std::lower_bound( v.begin(), v.end(), 7);
auto high = std::upper_bound( v.begin(), v.end(), 7);
std::cout << low - v.begin() << " " << high - v.begin();

因此,当我尝试在Mac上使用clang ++编译器编译此代码时,它将返回输出为

10 10

这意味着高和低都为v.end(),尽管低应该= 1且高= 7(数字8)。我在做什么错了?

1 个答案:

答案 0 :(得分:4)

std::lower_boundstd::upper_bound要求范围是“排序的”(实际上是根据谓词和给定值划分的),而不是您的情况。