0

我正在尝试使用基于它的值来检索向量的索引std::upper_bound。但是由于某种原因,以下代码集tmpKey等于2vs 我的预期值1。有什么东西是非常错误的吗?

int main()
{
    float time = 30.0000000;
    std::vector<float> positionKeyTimes = { 0.000000000, 30.0000000 };

    auto it = std::upper_bound(positionKeyTimes.begin(), positionKeyTimes.end(), time);
    auto tmpKey = (size_t)(it - positionKeyTimes.begin());

    std::cout << tmpKey << "\n";

    std::cin.get();
}
4

1 回答 1

2

std::upper_bound

返回一个迭代器,该迭代器指向范围 [first, last) 中大于value 的第一个元素,如果没有找到这样的元素,则返回 last。

向量中没有大于 30 的元素,因此返回结束迭代器。

要获得您的期望值,您可以改用std::lower_bound它,

返回一个迭代器,该迭代器指向范围 [first, last) 中不小于(即大于或等于)值的第一个元素,如果没有找到这样的元素,则返回 last。

记住那个

范围 [first, last) 必须根据表达式 element < value 或 comp(element, value) 进行划分,即表达式为真的所有元素必须在表达式为假的所有元素之前。完全排序的范围符合此标准。

于 2020-05-06T22:33:24.133 回答