Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/10/2014, 01:54
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: pair en c++ se muy poco

Código C++:
Ver original
  1. std::pair< std::string, double >tabla;

Ese "tabla" únicamente es capaz de almacenar dos valores: un string y un double. Si tu intención es tener una variable que permita almacenar una colección de parejas, necesitas un contenedor.

Dependiendo de tus necesidades concretas la elección del contenedor ideal puede variar:
  • std::vector: Es el contenedor más utilizado. Permite el acceso aleatorio, admite duplicados y el orden de los elementos es el que tú determines.
  • std::set: Este contenedor no admite el acceso aleatorio, no admite duplicados y los elementos aparecerán SIEMPRE ordenados.
  • std::map: Este contenedor permite indizar sus elementos en base a una clave. Esta clave es la que se usará para localizar cada uno de los elementos almacenados. No admite duplicados y los elementos aparecen SIEMPRE ordenados en base a su clave.

Luego hay variantes para set y map que admiten duplicados, pero dudo que en tu caso tengas que usarlos.

Para que te funcione lo que propones tienes que embeber tu pareja dentro de uno de los contenedores, de esta forma podrás almacenar múltiples parejas.

La forma de localizar un elemento variará dependiendo del contenedor elegido:

* vector
Código C++:
Ver original
  1. pareja p1 = { "hola", 3.45 };
  2. pareja p2 = { "adios", 45.8 };
  3.  
  4. typedef std::pair< std::string, double > pareja;
  5. std::vector< pareja > tabla;
  6.  
  7. tabla.push_back( p1 );
  8. tabla.push_back( p2 );
  9.  
  10. // Búsqueda
  11. std::string elementoABuscar = "adios";
  12. pareja parejaBuscada;
  13. for ( auto it = tabla.begin( ); it != tabla.end( ); ++it )
  14. {
  15.   if ( it->first == elementoABuscar )
  16.   {
  17.     parejaBuscada = *it;
  18.     break;
  19.   }
  20. }
  21.  
  22. std::cout << "Elemento buscado: " << pareja.first << " " << pareja.second << std::endl;

* set
Código C++:
Ver original
  1. pareja p1 = { "hola", 3.45 };
  2. pareja p2 = { "adios", 45.8 };
  3.  
  4. typedef std::pair< std::string, double > pareja;
  5. std::set< pareja > tabla;
  6.  
  7. tabla.insert( p1 );
  8. tabla.insert( p2 );
  9.  
  10. // Búsqueda
  11. std::string elementoABuscar = "adios";
  12. pareja parejaBuscada;
  13. for ( auto it = tabla.begin( ); it != tabla.end( ); ++it )
  14. {
  15.   if ( it->first == elementoABuscar )
  16.   {
  17.     parejaBuscada = *it;
  18.     break;
  19.   }
  20. }
  21.  
  22. std::cout << "Elemento buscado: " << pareja.first << " " << pareja.second << std::endl;

* map
Código C++:
Ver original
  1. pareja p1 = { "hola", 3.45 };
  2. pareja p2 = { "adios", 45.8 };
  3.  
  4. typedef std::pair< std::string, double > pareja;
  5. std::map< std::string, pareja > tabla;
  6.  
  7. tabla.insert( std::make_pair< p1.first, p1 > );
  8. tabla.insert( std::make_pair< p2.first, p2 > );
  9.  
  10. // Búsqueda
  11. std::string elementoABuscar = "adios";
  12. std::cout << "Elemento buscado: " << elementoABuscar << " " << tabla[elementoABuscar] << std::endl;

Hay otras formas de realizar la búsqueda, pero creo que esto sirve para que te hagas una idea.

Un saludo.