在 c++ 中选择有序映射的最后一个条目时,哪一个更好


  1. auto& myKey = myMap.rbegin()->first;
  2. 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往往更难一些。 如果您非常关心,我建议您在编译器中跟踪实际的发布模式程序集(或生成程序集输出),看看是否有区别。

相关内容

  • 没有找到相关文章

最新更新