我正试图使用std::upper_bound
根据向量的值检索向量的索引。不过,出于某种原因,下面的代码将tmpKey
设置为等于2
,而不是我期望的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();
}
std::upper_bound
返回一个迭代器,该迭代器指向范围[first,last(中的第一个元素,该元素大于值,如果未找到此类元素,则返回last。
向量中没有大于30的元素,因此返回结束迭代器。
为了得到你的期望值,你可以使用std::lower_bound
,哪个
返回一个迭代器,该迭代器指向范围[first,last(中的第一个元素,该元素不小于(即大于或等于(值,如果找不到此类元素,则返回last。
记住
必须根据表达式元素<value或comp(element,value(对范围[first,last(进行分区,即表达式为true的所有元素必须位于表达式为false的所有元素之前。完全排序的范围符合此标准。