我有一些看起来像
的关键帧async
数组根据时间值排序。我也有
sruct key-frame
{ float time;
matrix4x4 transformMatrix;}
我访问这个数组数百万次。数组本身保持不变。我的目标是找到float value;
大于time
的第一个关键帧的索引。这可以在恒定的时间内完成吗? c ++是否有一些映射不会将值范围重叠到特定值的东西?
答案 0 :(得分:2)
对于支持随机访问迭代器的集合,std::upper_bound
函数将在O(log n)时间内完成此操作(你肯定会这样做。)你需要告诉它如何比较结构,你可以做一个像这样的lambda函数:
auto keyframe_iterator =
std::upper_bound(keyframes.begin(), keyframes.end(), value,
[](const keyframe& a, const keyframe& b) { a.time < b.time; });`