Как перебирать карту в C ++

How Iterate Over Map C



В этом кратком руководстве мы увидим, как перебирать карты в C ++.

Существует несколько способов перебора карты в C ++. В более новых версиях C ++ появились более продвинутые способы перебора карты в C ++.







Давайте пройдемся по каждому по порядку.



Использование цикла for с stp :: map

Мы создали карту с именем countryCapitalMap и вставил в него пары 'ключ-значение'.



<для>
#включают
#включают
#включают
#включают
#включают
с использованием пространство именчасы;
intглавный() {
// Инициализируем карту
карта>'Индия','Дели'));
countryCapitalMap.вставлять(пара<строка, строка>('Непал','Катманду'));
countryCapitalMap.вставлять(пара<строка, строка>('Китай','Пекин'));
countryCapitalMap.вставлять(пара<строка, строка>('Франция','Париж'));

// Итерация с использованием итератора в цикле for
для (автоитрзнак равноcountryCapitalMap.начинать();итр!знак равноcountryCapitalMap.конец();итр++)
{
часы::Стоимость <<итр->первый// Ключ доступа
<< ':'
<<итр->второй// Доступ к значению
<<часы::конец;
}
возвращение 0;
}
</для>
Выход:
<для>
Китай:Пекин
Франция:Париж
Индия:Дели
Непал:Катманду
</для>

Как видите, мы напечатали country: capital (key: value), используя цикл for.





Если вы заметили, мы использовали auto спецификатор типа для итератора карты из-за удобочитаемости. Вы можете использовать map::iterator явно тоже.
Примечание: Если вы видите результат, он отсортирован по ключам в возрастающем порядке. Это связано с тем, что std :: map - это отсортированный ассоциативный контейнер с предоставленным Comparator (начиная с версии C ++ 11). Поскольку мы не предоставляли никакого компаратора, поэтому C ++ использовал компаратор по умолчанию для строки.

Использование цикла while с stp :: map

Мы также можем использовать цикл while вместо цикла for.



<для>
#включают
#включают
#включают
#include>
с использованием пространство именчасы;
intглавный() {
// Инициализируем карту
карта<строка, строка>странаКапиталКарта;
// Вставляем разные элементы на карту
countryCapitalMap.вставлять(пара<строка, строка>('Индия','Дели'));
countryCapitalMap.вставлять(пара<строка, строка>('Непал','Катманду'));
countryCapitalMap.вставлять(пара<строка, строка>('Китай','Пекин'));
countryCapitalMap.вставлять(пара<строка, строка>('Франция','Париж'));


// Создаем итератор для карты и инициализируем с помощью begin
автоитрзнак равноcountryCapitalMap.начинать();
// Итерация с использованием итератора в цикле while
в то время как (итр!знак равноcountryCapitalMap.конец())
{
часы::Стоимость <<итр->первый// Ключ доступа
<< ':'
<<итр->второй// Доступ к значению
<<часы::конец;
итр++;
}
возвращение 0;
}
</для>
Выход:
<для>
Китай:Пекин
Франция:Париж
Индия:Дели
Непал:Катманду
</для>

Использование цикла for на основе диапазона (начиная с версии C ++ 11)

Если вы используете версию C ++ 11, это наиболее элегантный способ перебора карты в C ++. Вы можете избежать традиционных кубических петель и использовать их вместо них.

<для>
#включают
#включают
#включают

с использованием пространство именчасы;
intглавный() {
// Инициализируем карту
карта<строка, строка>странаКапиталКарта;
// Вставляем разные элементы на карту
countryCapitalMap.вставлять(пара<строка, строка>('Индия','Дели'));
countryCapitalMap.вставлять(пара<строка, строка>('Непал','Катманду'));
countryCapitalMap.вставлять(пара<строка, строка>('Китай','Пекин'));
countryCapitalMap.вставлять(пара<строка, строка>('Франция','Париж'));


// Итерация с использованием итератора в цикле for
для (const авто &он:странаКапиталКарта) {
Стоимость <<он.первый << ':' <<он.второй<<' п';
}

возвращение 0;
}
</для>
Выход:
Китай:Пекин
Франция:Париж
Индия:Дели
Непал:Катманду

Использование цикла for на основе диапазона с парами 'ключ-значение' (начиная с версии C ++ 17)

Эта версия поддерживается начиная с C ++ 17 и обеспечивает более гибкий способ итерации по карте. Вы можете явно получить доступ к паре «ключ-значение» на карте, что обеспечивает еще более удобочитаемое решение.

<для>
#включают
#включают
#включают

с использованием пространство именчасы;
intглавный() {
// Инициализируем карту
карта<строка, строка>странаКапиталКарта;
// Вставляем разные элементы на карту
countryCapitalMap.вставлять(пара<строка, строка>('Индия','Дели'));
countryCapitalMap.вставлять(пара<строка, строка>('Непал','Катманду'));
countryCapitalMap.вставлять(пара<строка, строка>('Китай','Пекин'));
countryCapitalMap.вставлять(пара<строка, строка>('Франция','Париж'));


// Итерация с использованием итератора в цикле for
для (const авто& [ключ, значение] :странаКапиталКарта) {
Стоимость <<ключ<< ':' <<ценить<< ' п';
}

возвращение 0;
}
</для>
Выход:
Китай:Пекин
Франция:Париж
Индия:Дели
Непал:Катманду

Это все о том, как перебирать карту в C ++. Удачного кодирования!