auto& myKey = myMap.rbegin()->first;
auto& myKey = std::prev(myMap.end())->first;
myMap
一定の順序付けられたマップです。どちらのアプローチも常に複雑です。rbegin()
逆方向反復子を使用しますが、std::prev
双方向反復子で動作します。それらの間に効率の違いはありますか?
auto& myKey = myMap.rbegin()->first;
auto& myKey = std::prev(myMap.end())->first;
myMap
一定の順序付けられたマップです。どちらのアプローチも常に複雑です。rbegin()
逆方向反復子を使用しますが、std::prev
双方向反復子で動作します。それらの間に効率の違いはありますか?
の典型的な実装rbegin()
:
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
これは基本的に を行うのと同じstd::prev(myMap.end())
です。したがって、理論的にはそれらは同一になります。ただし、reverse_iterator
コンパイラ オプティマイザーでは少し厳しい傾向があります。気にするなら、コンパイラで実際のリリース モード アセンブリ (またはアセンブリ出力を生成) をトレースして、違いがあるかどうかを確認することをお勧めします。