我正在寻找一种让这项功能更快的方法。我为自己做了这个,所以想到可能是一个更好的解决方案。我使用的是c ++ 98 ...
基本上它从给定的帧向量返回给定currentFrame的索引,但有一些例外。
关键是,向量是未排序的,如果当前帧不存在于向量中,那么它应该从左边(MIN)给出最近的帧索引。如果左边的那个也丢失了,那么右边的(MAX)就丢失了。
int getFrameIndex(double currentFrame, std::vector<double> frames)
{
int f_index = 0;
if (frames.size() > 1)
{
int nearFIndex = INT_MIN;
int minFIndex = INT_MAX;
std::vector<double>::iterator it;
for(it = frames.begin(); it != frames.end(); ++it)
{
if (currentFrame == *it)
{
f_index = static_cast<int>(it - frames.begin());
break;
}
else if (currentFrame > *it && nearFIndex < *it)
{
nearFIndex = static_cast<int>(*it);
f_index = static_cast<int>(it - frames.begin());
continue;
}
else if (*it < minFIndex && nearFIndex == INT_MIN)
{
minFIndex = static_cast<int>(*it);
f_index = static_cast<int>(it - frames.begin());
}
}
}
return f_index;
}