是否可以刪除以下循環中的分支。所有的迭代器是從容器類型std::map<type_name, T>
在C++中優化if-else分支的一個小循環
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);
}
我覺得這個問題是分支,因此可以去除分支在此代碼,所以我可以分析在速度上有什麼不同?
ts從哪裏來? – Caribou
@John可能是函數的參數,說他在看的地方 – Yakk
除非你的地圖很大,並且你的結果非常接近'beginIter',我認爲後者會更快,因爲它沒有橫向RB的開銷 - 按順序排列。 –