2010-01-13 3 views
11

Je veux utiliser le conteneur de la carte de la STL pour rechercher un pointeur en utilisant des données binaires comme une clé j'ai donc écrit cet objet fonction personnalisée:STL Carte avec l'objet de fonction de comparaison personnalisée

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

Et en utilisant comme ceci:

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

Cette compile et semble fonctionner, mais je ne suis pas sûr de ce que d'un « non signé char * const & » type est et pourquoi il n'a pas fonctionné avec juste « unsigned char * »?

+17

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

Répondre

8

Vous devez fournir un comparateur qui garantit la non-modification des valeurs transmises, d'où le const (notez qu'il s'applique au pointeur pas au caractère). En ce qui concerne l'opérateur de référence (&), vous n'en avez pas besoin - c'est facultatif. Cela permettra également de compiler:

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

Il travaille pour moi avec juste unsigned char *.

Questions connexes