2016-08-26 22 views
-5

Iは地図範囲++

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

アレイは、時間値に従ってソートされているように見えるキーフレームの配列を有します。私も持っています

float value; 

私はこの配列に何百回もアクセスします。配列自体は変更されません。私の目標はtimeの最初のキーフレームのインデックスを見つけてvalueにすることです。これは一定の時間内に行うことができますか? C++には値の範囲と特定の値が重ならないようにマップするものがありますか?

+3

http://en.cppreference.com/w/cpp/algorithm/upper_bound – Brian

答えて

2

std::upper_bound関数は、ランダムアクセスイテレータをサポートしているコレクション(これはもっとも確実です)のO(log n)時間で正確にこれを行います。あなたができる構造体を比較する方法を教えてください次のようなラムダ関数:

auto keyframe_iterator = 
    std::upper_bound(keyframes.begin(), keyframes.end(), value, 
    [](const keyframe& a, const keyframe& b) { a.time < b.time; });`