ありますC++ map<double, class_name>
mymap
。double が与えられX
ます。
タスクは、以下の最大のキーに関連付けられた mymap の値を見つけることですX
。X
が最小キーよりも小さい場合は、mymap
以前に宣言されたデフォルト値を返します。
私のアプローチは、反復してmymap
以下の最大キーを見つけることですX
double max = std::numeric_limits<double>::lowest();
for ( auto ii=mymap.begin(); ii!=mymap.end(); ++ii ) {
if (
(*ii).first <= value &&
(*ii).first > max
) {
max = (*ii).first;
}
}
if ( max==std::numeric_limits<double>::lowest() )
return defaultValue;
return colorset.find(max)->second;
これは正しいアプローチですか?私はC ++マップが初めてなので、このタスクを実装するより良い方法があるかもしれないことを知りたいですか?
提案されたアルゴリズムの複雑さは だと思いますがO(n)
、おそらくそれを見つける方法O(log n)
や、さらに複雑さやメモリ割り当てを改善する方法がありますか?