将浮点值的范围映射到c ++中的单个值

时间:2016-08-26 00:36:56

标签: c++

我有一些看起来像

的关键帧
async

数组根据时间值排序。我也有

sruct key-frame
{ float time;
  matrix4x4 transformMatrix;}

我访问这个数组数百万次。数组本身保持不变。我的目标是找到float value; 大于time的第一个关键帧的索引。这可以在恒定的时间内完成吗? c ++是否有一些映射不会将值范围重叠到特定值的东西?

1 个答案:

答案 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; });`