cplusplus' entry on map::insert()「関数が挿入時間を最適化するヒントとして追加できる場所については、position
が先行するの要素を指します。「C++ 98の場合は、C++の場合には最適化が行われます」position
が要素を指している場合の場合が挿入されます。それは最後になるだろう)」std :: map insert()ヒント位置:C++ 98とC++の違い11
これは、私が働いているレガシーコードに豊富で、Scott Meyerの "Effective STL"の項目24の後にモデル化されたコードスニペットのパフォーマンスが、 C++ 11準拠のコンパイラ?
auto pLoc = someMap.lower_bound(someKey);
if(pLoc != someMap.end() && !(someMap.key_comp()(someKey, pLoc->first)))
return pLoc->second;
else
auto newValue = expensiveCalculation();
someMap.insert(pLoc, make_pair(someKey, newValue)); // using the lower bound as hint
return newValue;
C++ 11でこのパターンを改善するにはどうすればよいでしょうか?
を。素晴らしい仕事、C++。 –
参照[LWG問題233](http://wg21.link/lwg233)と[N1780](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1780.html )。実際にC++ 98仕様を実装している実装が存在するかどうかはわかりません。 –
@LightnessRacesinOrbit:Windows APIのためのWineの約束のように、C++ 98とのバグの互換性のバグを好むでしょうか? Windowsにはもう1つの重大なセキュリティ上のバグがあり、同じAPI仕様の全く異なる実装であるWineでも同じ脆弱性が発見されました。それは印象的ですが、私はむしろ、ISOがC++ 98の欠陥を永遠に伝播するのではなく、修正していると思います。 –