Карта STL с пользовательским объектом функции сравнения
Я хочу использовать контейнер Map 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;
Это компилируется и, кажется, работает, но я не уверен, что такое тип "unsigned char * const &" и почему он не работает только с "unsigned char *"?
2 ответа
Решение
Вам нужно предоставить компаратор, который гарантирует немодификацию переданных значений, следовательно, const (обратите внимание, что он применяется к указателю, а не к символу). Что касается справочного оператора (&
), вам это не нужно - это необязательно. Это также скомпилирует:
struct my_cmp
{
bool operator() (unsigned char * const a, unsigned char * const b)
{
return memcmp(a,b,4) < 0;
}
};