2010-01-13 43 views
11

我想使用STL的地圖容器使用二進制數據作爲一鍵查找一個指針,所以我寫了這個自定義函數對象:STL地圖自定義比較函數對象

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

,並用它是這樣的:

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

這編譯並似乎工作,但我不知道一個「無符號char * const的&」的類型是什麼,爲什麼它不只有「無符號字符*」工作?

+17

'return memcmp(a,b,4)<0;' – 2010-01-13 15:16:02

回答

8

您需要提供一個比較器,以保證不會修改傳遞的值,因此const(注意它適用於指針而不是char)。至於參考運算符(&),您不需要它 - 它是可選的。這也將編譯:

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

它適用於我只有unsigned char *