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];