Как использовать hash_map с char * и сравнивать строки? - PullRequest
4 голосов
/ 05 октября 2009

Я использовал std::hash_map<char*,T> и каким-то образом сумел заставить его работать, но теперь обнаружил, что функция сравнения по умолчанию, euqal_to<char*> выполняет сравнение указателей, а не сравнение строк. Я исправил это, сделав свой собственный тип сравнения (используя C * strcmp, и это около 5 LOC), но я был бы немного шокирован, если бы его не было в составе STL.

Итак, есть ли компаратор для сравнения строк?


Ссылка по теме

Ответы [ 2 ]

4 голосов
/ 05 октября 2009

Ну, std::strcmp определяется C ++, когда вы делаете #include <cstring>. Пример из документа hash_map SGI предоставляет strcmp пример создания собственной функции проверки равенства для символов char * (цитирование с начала документа SGI):

struct eqstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) == 0;
  }
};

Я должен сказать, что я согласен с автором ссылки в вашем посте , где он говорит, что для hash_map<char*> ошибка по умолчанию использовать hash<char*> по умолчанию. Но я обычно использую hash_maps (или, в последнее время, boost :: unordered_maps) на C ++ std :: strings для такого рода вещей.

0 голосов
/ 05 октября 2009

STL имеет метод find для типа строки. Это позволяет вам найти строку в строке, но вы можете использовать ее для сравнения 2 строк.

В противном случае у вас есть функция сравнения для std :: string vars.

Любой из этих переменных может быть построен с помощью символа *.

...