2010-01-13 14 views
11

Ich möchte die Karte Containers STL verwenden, um einen Zeiger auf Nachschlag von binären Daten als Schlüssel so schrieb ich diese benutzerdefinierte Funktion Objekt:STL Karte mit benutzerdefinierten Vergleichsfunktion Objekt

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

Und es wie folgt aus:

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

Dies kompiliert und scheint zu funktionieren, aber ich bin nicht sicher, was ein „unsigned char * const &“ Typ ist und warum es nicht nur mit „unsigned char *“ arbeiten?

+17

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

Antwort

8

Sie müssen einen Komparator bereitstellen, der das Nichtmodifizieren der übergebenen Werte garantiert, daher die Konstante const (beachten Sie, dass sie für den Zeiger Zeiger nicht das Zeichen gilt). Wie für die Referenz-Operator (&), Sie brauchen es nicht - es ist optional. Dies wird auch kompilieren:

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

Es funktioniert für mich mit nur unsigned char *.

Verwandte Themen