lower from for cplusplus bound c++ string stl map

c++ - from - std:: map for



Usando un std:: string como clave para un std:: map (1)

Error 24 error C2676: binario ''<'': ''const std :: string'' no define este operador o una conversión a un tipo aceptable para el operador predefinido c: / archivos de programa / microsoft visual studio 10.0 / vc / include / xfunctional 125 1 FXCMMarketDataServer

Eso es lo que VC escupe en tu cara cuando olvidaste incluir <string> . Ese encabezado definitivamente define a este operador.

Me gustaría tener un std :: map (int .NET 4.0). Por supuesto, sabemos que un mapa es un árbol y requiere un operador <esa cadena no nos define.

Error 24 error C2676: binario ''<'': ''const std :: string'' no define este operador o una conversión a un tipo aceptable para el operador predefinido c: / archivos de programa / microsoft visual studio 10.0 / vc / include / xfunctional 125 1 FXCMMarketDataServer

Así que puse mi google-foo a trabajar y encontré esta solución:

struct StringComparerForMap { public: bool operator()(const std::string x, const std::string y) { // Add compare logic here } }; ... std::map<std::string, CustomObject, StringComparerForMap> myMap;

Esto funcionó bien por un tiempo, y ahora me encuentro con un error que creo que se debe a esto. En algún lugar en lo más profundo del marco STL parecería que ignora la definición anterior y el operador predeterminado <.

¿Hay alguna forma en VS2010 .NET 4.0 de usar una cadena como la clave de un mapa?

Entiendo que puedo tomar esa cadena y escribir una función para enlazarla a un int, pero ¿dónde está la diversión?

EDITAR

Intentaré explicar esto lo mejor que pueda para David. Cuando el mapa utiliza la estructura del comparador, se bloquea en la versión y falla una aserción de depuración en la depuración. El aserto que falla está en la línea xtree 1746.

Expresión: operador inválido <

| Abortar | | Reintentar | | Ignorar |

Eso es lo que me lleva a creer que, a pesar de dar un comparador al mapa, aún sigue por ciertos caminos predeterminados al operador <para comparación. La línea en mi código que causa esto es:

CustomObject o = stringObjectMap[key];