| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Mar 08 Abr, 2003 6:26 pm Asunto: map |
|
|
Hola,
me podeis mostrar un ejemplo de uso de map?? como insertar, buscar un elemento por clave,... Con el ejemplo de la ayuda no me aclaro mucho.
Gracias |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 16 Abr, 2003 12:13 am Asunto: |
|
|
A ver si te sirve esto, sino da más detalles e intentare ayudarte en lo que pueda:
#include <map>
// Declaramos el map con clave y valor de tipo AnsiString
std::map<String, String> mapPaises;
// Insertamos datos: Pais-Capital
mapPaises["España"] = "Madrid";
mapPaises["Portugal"] = "Lisboa";
mapPaises["Francia"] = "París";
mapPaises["Alemania"] = "Berlín";
mapPaises["Italia"] = "Roma";
// Declaramos el iterador
std::map<String, String>::iterator ite;
// Buscamos una clave
ite = mapPaises.find("España");
// Si existe mostramos su valor
if (ite != mapPaises.end())
ShowMessage(ite->second);
else
ShowMessage("No encontrado");
Otros detalles que pueden serte útiles:
// Vaciamos el map
mapPaises.clear();
// Puedes comprobar si el map esta vacio
bool EstaVacio = mapPaises.empty();
// La cantidad de elementos
int NumElementos = mapPaises.size();
// Mostramos el valor de una clave dada
// En este caso si no existe devuelve "" y añade la clave a la lista
String Capital = mapPaises["España"];
// Rellenamos un TMemo (Memo1) con todas las claves y sus valores
// Ya hemos declarado 'ite' mas arriba
for (ite = mapPaises.begin(); ite != mapPaises.end(); ite++)
Memo1->Lines->Add(ite->first + " = " + ite->second); |
|
| Volver arriba |
|
 |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Sab 19 Abr, 2003 10:48 am Asunto: |
|
|
Gracias leo, me resultó muy útil tu respuesta. Una última pregunta sobre esto: ¿por qué no puedo crear un map utilizando tipos declarados dentro de la misma función? Por ejemplo:
| Código: |
enum TDia{domingo,lunes,martes};
std::map<TDia,int> mapa;
|
eso me da error (no puede generar especialización de plantilla...¿?). En cambio si pongo el enum como variable global si va  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 20 Abr, 2003 11:22 am Asunto: |
|
|
Tiene que ser global o miembro de la clase, no puede ser local.
Te pongo el mensaje de error que da el Visual C++, que es bastante mas claro:
[Error del compilador C2926]
'tipo' : los tipos sin vinculación no se pueden utilizar como argumentos de plantilla
No se puede generar una clase de plantilla (una clase creada a partir de una
plantilla de clase) basándose en un tipo local. Los tipos usados para crear
instancias de plantillas deben tener vinculación externa.
Ejemplo:
// C2926.cpp
template<class T> class X{};
void f()
{
struct Y{};
X<Y> x; // C2926
}
int main()
{
}
|
|
| Volver arriba |
|
 |
|