Как использовать hash_map с char * и сравнивать строки?

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

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


Дополнительная ссылка

4 голоса | спросил BCS 5 +04002009-10-05T01:56:50+04:00312009bEurope/MoscowMon, 05 Oct 2009 01:56:50 +0400 2009, 01:56:50

2 ответа


0

Ну, std::strcmp определяется C ++, когда вы делаете #include <cstring>. Пример в документе SGI hash_map предоставляет 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 для такого рода вещей.

ответил cce 5 +04002009-10-05T02:09:56+04:00312009bEurope/MoscowMon, 05 Oct 2009 02:09:56 +0400 2009, 02:09:56
0

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

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

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

ответил Patrice Bernassola 5 +04002009-10-05T02:06:32+04:00312009bEurope/MoscowMon, 05 Oct 2009 02:06:32 +0400 2009, 02:06:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132