Я хочу создать систему анимации в C ++, в которой я храню ключевые кадры, которые имеют время и значение. Эти значения должны быть интерполированы во время воспроизведения, поэтому мне нужно, чтобы они сортировались по их переменной времени. Потому что при интерполяции я всегда хочу интерполировать только между последним и следующим ключевым кадром (как это обычно делается).
Как мне хранить ключевые кадры, чтобы я мог легко (и быстро) получить доступ к ключевому кадру до и после определенного времени?
Сначала мне пришло в голову std :: map, но там у меня проблемы с правильным порядком ключевых кадров … Есть идеи, как сделать это лучше?
Вы можете использовать std :: vector и сохранять правильный порядок ключевых кадров.
Предполагая, что ключевые кадры отсортированы по времени в векторе, вы можете извлечь
соответствующий ключевой кадр с std::lower_bound
или же std::binary_search
в логарифмическом времени.
std::map
внутренне хранит элементы отсортированные по ключу
следуя строгому критерию слабого порядка. Итак, если вы используете время в качестве ключа, вы
сохранит правильный порядок ключевых кадров.
Лично я бы использовал std :: vector.
Других решений пока нет …