MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17

Iniciado por snoopty, 20 Diciembre 2021, 08:23 AM

0 Miembros y 2 Visitantes están viendo este tema.

snoopty

Posiblemente consiguiera lo que busco si alguien me pudiera decir cómo setear correctamente Codeblocks 20.03 ( solamente para este archivo ) para compilar con C ++ 17 -- ya tengo instalada la ultima versión de MinGW, con ésta pude compilar de todo ....... hasta ahora.
Así como tengo seteado tanto Codeblocks como Dev C++ 5.11, este Código entra en un loop infinito.

Código (cpp) [Seleccionar]

#include <map>
#include <string>
using namespace std;

int main( )
{

map < string, string > ciudades = { { "123", "Lima" },
                                   { "234", "Tucson" },
                                   { "345", "Buenos Aires" }
};


// 1  INSERTAR UN ELEMENTO, un "  PAIR : ' Tipo, Tipo '  ' Key, Value '  "

ciudades.insert ( pair < string, string > ( "1", "Moscu" ) ); // Recién después de ( 2 ) se Mostrará a Moscú como 1er Elemento
                                                             // por tener su " Key " menor a las demás

ciudades.insert ( pair < string, string > ( "123", "Trujillo" ) );


// 2  MOSTRAR X PANTALLA
// I  " BUSCANDO " UN ELEMENTO MEDIANTE LA LLAVE

string key = "123";

cout << ciudades [ key ] << "\n"; // Mostrará " Lima " porque a Cada " Value " le corresponde una única " Key "



// II  RECORRIENDO EL MAPA ( Existen dos Posibilidades )
// a ) La Forma más " Tradicional " =   map  Tipo, Tipo :: DECLARANDO UN ITERATOR ( Y LUEGO ) " FOR CON PUNTEROS EN COUT "

map < string, string > :: iterator it;

for ( it = ciudades.begin( ); it != ciudades.end( ); ++it ) // Los " ( ) "  ' especifican ' " LO QUE EXISTA AL COMIENZO
                                                           // E INMEDIATAMENTE DESPUÉS ( x eso ' it != ' ) DEL FINAL ( "\0         " )
{

cout << it -> first << " = " << it -> second << "\n";

}


// b ) La forma más Fácil = "   AUTO&  ' Key  Value '  :  NombreDelMapa   "  ( Y LUEGO ) " FOR SIN PUNTEROS EN COUT "
// ESTA FORMA SÓLO SE CONSIGE  S E T E A N D O  este archivo p q sea compilado con C++ 17
// para aprovechar STRUCTURED BINDINGS de C++ 17

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}

*/
//3 MODIFICAR UN ELEMENTO = NombreDelMapa " . " FIND ( " Key " )

map < string, string > :: iterator it2 = ciudades.find("123");

if ( it2 != ciudades.end( ))
{
it2 -> second = "Trujillo";
}

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}

// 4 ELIMINAR UN ELEMENTO = NombreDelMapa " . " ERASE ( " Key " )

ciudades.erase("1");

for ( auto& [k v] : ciudades )
{

cout << k << " = " << v << "\n";

}


return 0;
}


Gracias x leeer el mensaje.





.xAk.

¿no sería suficiente añadir -std=gnu++17 o -std=c++17 en las opciones de compilación del proyecto?

es auto& [ k, v ] ¿cierto?

el bucle infinito debe ser por ese for en el que incrementas antes y no después (++it)

Saludos




snoopty

Gracias x responder
Es que no tengo habilitado " Build Options " en Proyect; cómo lo activo ? ( existiría la posibilidad de añadir -std=gnu++17 (ó) -std=c++17 desde otro menú ?? )
Desde Settings / Compiler / Compiler Settings sólo tengo la flag -std=C17, la tildé y no me lo compila.  
De lo otro; así es, como vos decís, "  auto& [ k, v ] "

BloodSharp