Какой из них лучше, когда выберите последнюю запись упорядоченной карты в C++

  1. auto& myKey = myMap.rbegin()->first;
  2. auto& myKey = std::prev(myMap.end())->first;

myMap постоянная упорядоченная карта. Оба подхода имеют постоянную сложность. rbegin()использует обратный итератор, в то время как std::prevработает на двунаправленном итераторе. Есть ли разница в эффективности между ними?

1 ответ

Типичная реализация для rbegin():

reverse_iterator rbegin()
{
    return reverse_iterator(end());
}

По сути, это то же самое, что и std::prev(myMap.end()), Таким образом, теоретически они будут идентичны. Тем не менее reverse_iterator имеет тенденцию быть немного сложнее на оптимизаторах компилятора. Если вас это сильно волнует, я бы посоветовал проследить фактическую сборку в режиме выпуска (или сгенерировать вывод сборки) в вашем компиляторе и посмотреть, есть ли разница.

Другие вопросы по тегам