Tak, są równoważne. Standardowe gwarancje w 6.5.4:
dla wielu oparte na zestawieniu postaci
dla (for-zakresie-deklaracji: wyrażenie) instrukcja
let zakres-Init za równoważne wyrażenie w nawiasie (wyrażenie)
i zakres oparte na zestawieniu postaci
dla (na wybiegu-deklaracji: usztywnione-listy startowe) oświadczenie
niech range-init będzie równoważne z listą z zaprogramowanymi początkami. W każdym przypadku, zakres oparty na rachunku odpowiada
{
auto && __range = range-init;
for (auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin) {
for-range-declaration = *__begin;
statement
}
}
gdzie __range, __begin i __end zmienne są zdefiniowane jedynie do ekspozycji, a _RangeT jest typ ekspresji i czasu rozpoczęcia Wyrażenia i wyrażenia końcowe są określane w następujący sposób: wyrażenia, wyrażenia początkowy i końcowy są określane w następujący sposób:
- jeśli _RangeT jest typem tablicy, wyrażeniem początkowym i końcowym wyrażenia __range i __range + __bound, odpowiednio, gdzie __bound jest związaną tablicą.Jeśli _RangeT jest tablicą nieznanego rozmiaru lub tablicą niekompletnego typu, program jest źle sformułowany;
- jeśli _RangeT jest typem klasy, nieuwarunkowane-ids zaczynają i kończą się są wyszukiwane w zakresie klasy _RangeT tak, jak przy wyszukiwaniu dostępu do klasy członka (3.4.5) i jeśli jedno (lub oba) znajdują co najmniej jedno oświadczenie, begin- expr i end-expr to odpowiednio __range.begin() i __range.end();
- w przeciwnym razie, zaczynają lista_wyrażeń_sortowania końcówki wyrażenie to rozpocząć (_ zakres) i na końcu ( _range), odpowiednio, w których rozpoczyna się i kończy się wzrok z odnośnika argumentu zależne (3.4.2). Do celów tego wyszukiwania nazw przestrzeń nazw przestrzeń nazw jest skojarzoną przestrzenią nazw.
Chociaż twoje pytanie o mapę jest trochę bezsensowne. Jeśli jest to uporządkowana mapa i prawidłowo przeglądasz mapę, są one równoważne. Jeśli jest to mapa nieuporządkowana, twoje pytanie nie ma większego sensu.
Można zoptymalizować nieco niepotrzebną kopię, wykonując 'auto &' zamiast 'auto' –