2010-01-13 18 views
11

quiero usar contenedores Mapa del STL para buscar un puntero mediante el uso de datos binarios como una llave para que me escribió esta función personalizada objeto:STL Mapa con la costumbre de comparar la función objeto

struct my_cmp 
{ 
    bool operator() (unsigned char * const &a, unsigned char * const &b) 
    { 
     return (memcmp(a,b,4)<0) ? true : false; 
    } 
}; 

Y su uso como esto:

map<unsigned char *, void *, my_cmp> mymap; 

Esto compila y parece que funciona, pero no estoy seguro de lo que un "char * const & sin firmar" tipo es y por qué no funcionó con sólo "unsigned char *"?

+17

'return memcmp (a, b, 4) <0;' –

Respuesta

8

Debe proporcionar un comparador que garantice la no modificación de los valores pasados, por lo tanto, la const (tenga en cuenta que se aplica al puntero no es el char). En cuanto al operador de referencia (&), no lo necesita, es opcional. Esto también se compilará:

struct my_cmp 
{ 
    bool operator() (unsigned char * const a, unsigned char * const b) 
    { 
     return memcmp(a,b,4) < 0; 
    } 
}; 
1

Me funciona con sólo unsigned char *.

Cuestiones relacionadas