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

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

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

3

Решение

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]