Карта STL с пользовательским объектом функции сравнения - PullRequest
11 голосов
/ 13 января 2010

Я хочу использовать контейнер 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 ]

8 голосов
/ 13 января 2010

Вам необходимо предоставить компаратор, который гарантирует немодификацию переданных значений, следовательно, const (обратите внимание, что он применяется к указателю , а не к символу). Что же касается эталонного оператора (&), вам не нужно - это необязательно. Это также скомпилирует:

struct my_cmp
{
    bool operator() (unsigned char * const a, unsigned char * const b)
    {
        return memcmp(a,b,4) < 0;  
    }
};
1 голос
/ 13 января 2010

у меня работает только с unsigned char *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...