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
имеет тенденцию быть немного сложнее на оптимизаторах компилятора. Если вас это сильно волнует, я бы посоветовал проследить фактическую сборку в режиме выпуска (или сгенерировать вывод сборки) в вашем компиляторе и посмотреть, есть ли разница.
Других решений пока нет …