Veo que no miraste bien los ejemplos que te di. Con lo que dio migsantiago y un ejemplo de los que estan en los links que te pase te hubieras dado cuenta ahi nomas, hasta yo me di cuenta y no uso C++
En el 3er link:
#include <map>
#include <string>
#include <iostream.h>
// Aca definis tus valores
static enum StringValue { evNotDefined,
evStringValue1,
evStringValue2,
evStringValue3,
evEnd };
// Mapa para asociar las cadenas con los valores
static std::map<std::string, StringValue> s_mapStringValues;
// Entrada de ususario
static char szInput[_MAX_PATH];
// Inicializacion
static void Initialize();
int main(int argc, char* argv[])
{
// Inicializar el mapa
Initialize();
// Loop hasta que termine el programa
while(1)
{
// Tomar el dato de entrada
cout << "Por favor ingrese la string (fin para terminar): ";
cout.flush();
cin.getline(szInput, _MAX_PATH);
// Tomar el valor
switch(s_mapStringValues[szInput])
{
case evStringValue1:
cout << "Detectado el primer string." << endl;
break;
case evStringValue2:
cout << "Detectado el segundo string." << endl;
break;
case evStringValue3:
cout << "Detectado el tercero." << endl;
break;
case evEnd:
cout << "Detectado string de fin de programa. "
<< "Programa detenido." << endl;
return(0);
default:
cout << "'" << szInput
<< "' String no valida. s_mapStringValues Contiene "
<< s_mapStringValues.size()
<< " entradas." << endl;
break;
}
}
return 0;
}
void Initialize()
{
s_mapStringValues["teclado"] = evStringValue1;
s_mapStringValues["impresora"] = evStringValue2;
s_mapStringValues["modem"] = evStringValue3;
s_mapStringValues["fin"] = evEnd;
cout << "s_mapStringValues contiene "
<< s_mapStringValues.size()
<< " entradas." << endl;
}
De tener que verificar por "Teclado" o "teclado", lo unico que haces es convertir la entrada a lowercase asi ambos son contenidos como "teclado".
Y para el caso de enteros podes usar algo que lo convierta en un hash y de alli compararlo con los hash de las palabras guardadas, pero la generacion del hash involucraria posiblidad de colicion y mas ciclos de maquina que tal ves no importe. O podrias directamente hacer una funcion con if/elseif y que devuelva un entero y dependiendo del entero hacer lo que tengas que hacer, sino aca lo hacen con enum (Parecido a lo que harias con enteros sin enum):
enum string_code {
eFred,
eBarney,
eWilma,
eBetty,
...
};
string_code hashit (std::string const& inString) {
if (inString == "Fred") return eFred;
if (inString == "Barney") return eBarney;
...
}
void foo() {
switch (hashit(stringValue)) {
case eFred:
...
case eBarney:
...
}
}
Donde stringValue es lo que recibis del usuario, eso lo manda a otra funcion que con unos if/else verifica si es uno de esas strings y retorna un valor definido en enum.