On cplusplus' entry on map::insert()我读了关于可以添加的位置,作为函数的提示,“函数优化插入时间position
指向之前的元素插入的元素“for C++ 98,而对于C++ 11则优化发生”if if position
指向的元素将跟在插入的元素(或结尾,if这将是最后一次)“。std :: map insert()提示位置:C++ 98和C++之间的区别11
这是否意味着以下形式的代码片段的性能(这些代码片段在我正在处理的遗留代码中丰富并在Scott Meyer的“有效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:那么你喜欢bug与C++ 98的兼容性问题,就像Wine承诺Windows API一样?曾经有一次在Windows中存在另一个严重的安全漏洞,在Wine中发现了同样的漏洞,这当然是完全不同的相同API规范的实现。这有点令人印象深刻,但我宁愿ISO修复C++ 98中的缺陷,而不是将它们传播到永恒。 –