次のループでブランチを削除することは可能ですか。すべてのイテレータはコンテナ型からのものですstd::map<type_name, T>
record_iterator beginIter = lastLookup_;
record_iterator endIter = lastLookup_;
++endIter;
for(;endIter != end(); ++beginIter, ++endIter){
time_type now = beginIter->first;
if(ts == now){
lastLookup_ = beginIter;
return beginIter;
}else if(ts > now && ts <= endIter->first){
lastLookup_ = beginIter;
return endIter;
}
}
このアルゴリズムが解決しようとしている問題は、最後に検索された場所と同じか (それほど遠くない) 前方にあると想定される前方参照を最適化することです。理想的には、最後に検索した場所の反復子を保持し、直線的に前進します。しかし、これは、
record_iterator it= sliceMap_.find(ts);
if(it !=end()){
return it;
}else{
return sliceMap_.upper_bound(ts);
}
問題はブランチだと思うので、このコードでブランチを削除して、速度の違いをプロファイルできますか?