c++ - ¿Cómo utilizar el bucle for () basado en rango con std :: map?




2 Answers

En C ++ 17 esto se denomina enlaces estructurados , lo que permite lo siguiente:

std::map< foo, bar > testing = { /*...blah...*/ };
for ( const auto& [ k, v ] : testing )
{
  std::cout << k << "=" << v << "\n";
}
c++ c++11 for-loop dictionary

El ejemplo común para C ++ 11 basado en rango para () bucles es siempre algo simple como esto:

std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
     std::cout << xyz << std::endl;
}

En cuyo caso xyz es un int . Pero, ¿qué pasa cuando tenemos algo como un mapa? ¿Cuál es el tipo de la variable en este ejemplo:

std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
    std::cout << abc << std::endl;         // ? should this give a foo? a bar?
    std::cout << abc->first << std::endl;  // ? or is abc an iterator?
}

Cuando el contenedor que se recorre es algo simple, parece que los bucles basados ​​en rango para () nos darán cada elemento, no un iterador. Lo que es bueno ... si fuera iterador, lo primero que siempre tendríamos que hacer es desreferenciarlo de todos modos.

Pero estoy confundido en cuanto a qué esperar cuando se trata de cosas como mapas y multimapas.

(Todavía estoy en g ++ 4.4, mientras que los bucles basados ​​en rangos están en g ++ 4.6+, así que aún no he tenido la oportunidad de probarlo).







Related