Существует несколько способов перебора карты в 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 ++. Удачного кодирования!