Como iterar no mapa em C ++

How Iterate Over Map C



Neste tutorial rápido, veremos como iterar no mapa em C ++.

Existem várias maneiras de iterar no mapa em C ++. Com as versões mais recentes do C ++, existem maneiras mais avançadas de iterar no mapa em C ++.







Vamos examinar um por um.



Usando o loop for com stp :: map

Criamos um mapa chamado countryCapitalMap e inseriu pares de valores-chave nele.



<para>
#incluir
#incluir
#incluir
#incluir
#incluir
usando namespacehoras;
inta Principal() {
// Inicializa um mapa
mapa>'Índia','Délhi'));
countryCapitalMap.inserir(par<string, string>('Nepal','Kathmandu'));
countryCapitalMap.inserir(par<string, string>('China','Pequim'));
countryCapitalMap.inserir(par<string, string>('França','Paris'));

// Iterar usando iterador no loop for
para (autoitr=countryCapitalMap.começar();itr!=countryCapitalMap.fim();itr++)
{
horas::custo <<itr->primeiro// Chave de acesso
<< ':'
<<itr->segundo// Valor de acesso
<<horas::endl;
}
Retorna 0;
}
</para>
Saída:
<para>
China:Pequim
França:Paris
Índia:Délhi
Nepal:Kathmandu
</para>

Como você pode ver, imprimimos país: capital (chave: valor) usando o loop for.





Se você notar, usamos auto especificador de tipo para o iterador do mapa devido à legibilidade. Você pode usar map::iterator explicitamente também.
Observação: Se você vir a saída, ela é classificada por chaves em ordem crescente. Isso ocorre porque std :: map é um contêiner associativo classificado com o Comparador fornecido (versão C ++ 11 em diante). Como não fornecemos nenhum comparador, C ++ usou o Comparador padrão para string.

Usando loop while com stp :: map

Também podemos usar um loop while em vez de um loop for.



<para>
#incluir
#incluir
#incluir
#include>
usando namespacehoras;
inta Principal() {
// Inicializa um mapa
mapa<string, string>countryCapitalMap;
// Insira diferentes elementos no mapa
countryCapitalMap.inserir(par<string, string>('Índia','Délhi'));
countryCapitalMap.inserir(par<string, string>('Nepal','Kathmandu'));
countryCapitalMap.inserir(par<string, string>('China','Pequim'));
countryCapitalMap.inserir(par<string, string>('França','Paris'));


// Crie um iterador para o mapa e inicialize com begin
autoitr=countryCapitalMap.começar();
// Iterar usando iterador no loop while
enquanto (itr!=countryCapitalMap.fim())
{
horas::custo <<itr->primeiro// Chave de acesso
<< ':'
<<itr->segundo// Valor de acesso
<<horas::endl;
itr++;
}
Retorna 0;
}
</para>
Saída:
<para>
China:Pequim
França:Paris
Índia:Délhi
Nepal:Kathmandu
</para>

Usando intervalo baseado em loop (versão C ++ 11 em diante)

Se você estiver usando a versão C ++ 11, esta é a maneira mais elegante de iterar sobre o mapa em C ++. Você pode evitar loops cubersome tradicionais e usá-los em seu lugar.

<para>
#incluir
#incluir
#incluir

usando namespacehoras;
inta Principal() {
// Inicializa um mapa
mapa<string, string>countryCapitalMap;
// Insira diferentes elementos no mapa
countryCapitalMap.inserir(par<string, string>('Índia','Délhi'));
countryCapitalMap.inserir(par<string, string>('Nepal','Kathmandu'));
countryCapitalMap.inserir(par<string, string>('China','Pequim'));
countryCapitalMap.inserir(par<string, string>('França','Paris'));


// Iterar usando iterador no loop for
para (const auto Eele:countryCapitalMap) {
custo <<ele.primeiro << ':' <<ele.segundo<<' n';
}

Retorna 0;
}
</para>
Saída:
China:Pequim
França:Paris
Índia:Délhi
Nepal:Kathmandu

Uso de loop for baseado em intervalo com pares de valores-chave (versão C ++ 17 em diante)

Esta versão é suportada a partir do c ++ 17 e fornece uma maneira mais flexível de iterar no mapa. Você pode acessar explicitamente o par de valores-chave no mapa, o que fornece uma solução ainda mais legível.

<para>
#incluir
#incluir
#incluir

usando namespacehoras;
inta Principal() {
// Inicializa um mapa
mapa<string, string>countryCapitalMap;
// Insira diferentes elementos no mapa
countryCapitalMap.inserir(par<string, string>('Índia','Délhi'));
countryCapitalMap.inserir(par<string, string>('Nepal','Kathmandu'));
countryCapitalMap.inserir(par<string, string>('China','Pequim'));
countryCapitalMap.inserir(par<string, string>('França','Paris'));


// Iterar usando iterador no loop for
para (const autoE [valor chave] :countryCapitalMap) {
custo <<chave<< ':' <<valor<< ' n';
}

Retorna 0;
}
</para>
Saída:
China:Pequim
França:Paris
Índia:Délhi
Nepal:Kathmandu

É tudo sobre como iterar no mapa em C ++. Boa codificação!