2010-01-13 44 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 *