Получение индекса вектора с помощью std :: upper_bound, index out of bounds - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь получить индекс вектора на основе его значения, используя 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();
}

1 Ответ

2 голосов
/ 07 мая 2020

std::upper_bound

Возвращает итератор, указывающий на первый элемент в диапазоне [first, last), который больше , чем значение, или последний, если такой элемент не найден.

В вашем векторе нет элемента больше 30, поэтому возвращается конечный итератор.

Чтобы получить ожидаемое значение, вы можете использовать std::lower_bound вместо этого, что

Возвращает итератор, указывающий на первый элемент в диапазоне [first, last), который не меньше чем (т.е. больше или равно) значению или последним, если такой элемент не найден.

Помня, что

Диапазон [first, last) должен быть разделен на части выражения element

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...