пройти через std :: map с меньшим сравнением между итераторами - PullRequest
0 голосов
/ 19 декабря 2018

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

for (auto i = m.begin(); i != m.end(); i++)
{    ...    ... }

Почему мы не можем использовать следующее:

for (auto i = m.begin(); i < m.end(); i++)
{    ...    ... }

Мое предположениепотому что элементы в ассоциативном контейнере не хранятся в последовательном порядке, как последовательные контейнеры, верно?

1 Ответ

0 голосов
/ 19 декабря 2018

Оператор сравнения < требует итераторов произвольного доступа .

map предоставляет только двунаправленные итераторы.Причина в том, что с таким итератором нельзя сказать, находится ли другой итератор в постоянном времени до или после (да, они не находятся один за другим в памяти).

Поскольку != действует для всехтипы итераторов, используйте его вместо < версии.Это портативно, если вы измените тип контейнера.

...