Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: snoopty en 20 Diciembre 2021, 08:23 am



Título: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 20 Diciembre 2021, 08:23 am
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
  1. #include <map>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main( )
  6. {
  7.  
  8. map < string, string > ciudades = { { "123", "Lima" },
  9.                                    { "234", "Tucson" },
  10.                                    { "345", "Buenos Aires" }
  11. };
  12.  
  13.  
  14. // 1  INSERTAR UN ELEMENTO, un "  PAIR : ' Tipo, Tipo '  ' Key, Value '  "
  15.  
  16. ciudades.insert ( pair < string, string > ( "1", "Moscu" ) ); // Recién después de ( 2 ) se Mostrará a Moscú como 1er Elemento
  17.                                                              // por tener su " Key " menor a las demás
  18.  
  19. ciudades.insert ( pair < string, string > ( "123", "Trujillo" ) );
  20.  
  21.  
  22. // 2  MOSTRAR X PANTALLA
  23. // I  " BUSCANDO " UN ELEMENTO MEDIANTE LA LLAVE
  24.  
  25. string key = "123";
  26.  
  27. cout << ciudades [ key ] << "\n"; // Mostrará " Lima " porque a Cada " Value " le corresponde una única " Key "
  28.  
  29.  
  30.  
  31. // II  RECORRIENDO EL MAPA ( Existen dos Posibilidades )
  32. // a ) La Forma más " Tradicional " =   map  Tipo, Tipo :: DECLARANDO UN ITERATOR ( Y LUEGO ) " FOR CON PUNTEROS EN COUT "
  33.  
  34. map < string, string > :: iterator it;
  35.  
  36. for ( it = ciudades.begin( ); it != ciudades.end( ); ++it ) // Los " ( ) "  ' especifican ' " LO QUE EXISTA AL COMIENZO
  37.                                                            // E INMEDIATAMENTE DESPUÉS ( x eso ' it != ' ) DEL FINAL ( "\0         " )
  38. {
  39.  
  40. cout << it -> first << " = " << it -> second << "\n";
  41.  
  42. }
  43.  
  44.  
  45. // b ) La forma más Fácil = "   AUTO&  ' Key  Value '  :  NombreDelMapa   "  ( Y LUEGO ) " FOR SIN PUNTEROS EN COUT "
  46. // ESTA FORMA SÓLO SE CONSIGE  S E T E A N D O  este archivo p q sea compilado con C++ 17
  47. // para aprovechar STRUCTURED BINDINGS de C++ 17
  48.  
  49. for ( auto& [k v] : ciudades )
  50. {
  51.  
  52. cout << k << " = " << v << "\n";
  53.  
  54. }
  55.  
  56. */
  57. //3 MODIFICAR UN ELEMENTO = NombreDelMapa " . " FIND ( " Key " )
  58.  
  59. map < string, string > :: iterator it2 = ciudades.find("123");
  60.  
  61. if ( it2 != ciudades.end( ))
  62. {
  63. it2 -> second = "Trujillo";
  64. }
  65.  
  66. for ( auto& [k v] : ciudades )
  67. {
  68.  
  69. cout << k << " = " << v << "\n";
  70.  
  71. }
  72.  
  73. // 4 ELIMINAR UN ELEMENTO = NombreDelMapa " . " ERASE ( " Key " )
  74.  
  75. ciudades.erase("1");
  76.  
  77. for ( auto& [k v] : ciudades )
  78. {
  79.  
  80. cout << k << " = " << v << "\n";
  81.  
  82. }
  83.  
  84.  
  85. return 0;
  86. }
  87.  

Gracias x leeer el mensaje.






Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: .xAk. en 20 Diciembre 2021, 15:29 pm
¿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



Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 21 Diciembre 2021, 11:12 am
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 ] "


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: BloodSharp en 21 Diciembre 2021, 14:13 pm
( existiría la posibilidad de añadir -std=gnu++17 (ó) -std=c++17 desde otro menú ??

(https://i.imgur.com/t2NJphA.png)
(https://i.imgur.com/fMEZyyy.png)


B#


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 8 Enero 2022, 18:53 pm
Gracias amigo; pero si has leído, no puedo hacer " 1 " si no tengo habilitado
Build Options dentro del menú Proyects .... entonces no puedo llegar a 4.


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: .xAk. en 8 Enero 2022, 19:34 pm
si has leído

sorry, leí por encima,

SaludOS


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: MAFUS en 9 Enero 2022, 11:56 am
¿Puede ya tuvieras el .cpp y lo abrieras sin más sin generar un proyecto? Eso explicaría que el IDE no lo reconociera como tal y te deshabilitara ese menú.


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 9 Enero 2022, 19:39 pm
sorry, leí por encima,

SaludOS



No ..... esa respuesta no era para vos = era para Bloodsharp


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 9 Enero 2022, 19:44 pm
¿Puede ya tuvieras el .cpp y lo abrieras sin más sin generar un proyecto? Eso explicaría que el IDE no lo reconociera como tal y te deshabilitara ese menú.


Gracias x responder : no; lo escribí, y luego intenté compilar.
Por otra parte, te comento que soy algo nuevo en todo esto; siempre abro " empty files " antes de escribir código .... y no " new proyect " : ¿ esto influiría tal vez ?


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: MAFUS en 9 Enero 2022, 19:51 pm
Supongo que sí. Cuando creas un proyecto el IDE te prepara el entorno para hacer todo el trabajo de compilación por ti.

Un empty file es un archivo simplemente. A lo mejor el IDE sabe qué hacer con él, puede. Lo que sí es cierto es que en cuánto necesites más que ese archivo el IDE no sabrá qué hacer pues no hay nada que se lo diga.


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: .xAk. en 10 Enero 2022, 06:57 am
No ..... esa respuesta no era

pues ya ves si fue por encima, pensaba en el for que incrementa antes.
(https://i.imgur.com/24QYR23.gif)
Saludos


Título: Re: MAPAS : Código donde es necesario setear a Codeblocks con compilador para C++ 17
Publicado por: snoopty en 10 Enero 2022, 12:20 pm
Gracias !