c++ - 如何将 hash_map 与 char* 一起使用并进行字符串比较?

标签 c++ string stl hashmap

我正在使用 std::hash_map<char*,T>并以某种方式设法使其工作,但现在发现默认的比较功能 euqal_to<char*>进行指针比较而不是字符串比较。我已经通过制作我自己的比较类型(使用 C 的 strcmp 并且它大约是 5 LOC)来解决这个问题,但是如果 STL 中还没有一个比较类型,我会感到有点震惊。

那么,有没有比较器可以做字符串比较呢?


Related link

最佳答案

嗯,std::strcmp当你执行 #include <cstring> 时由 C++ 定义. SGI's hash_map doc 中的示例提供一个 strcmp - 基于为 char* 制作自己的相等性测试函数的示例(引用自 SGI 文档的开头):

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

我不得不说我同意 link in your post 的作者,他说这已经是一个错误 hash_map<char*>默认使用基于字符串的 hash<char*> .但我通常在 C++ std::strings 上使用 hash_maps(或者最近使用 boost::unordered_maps)来处理这种事情。

关于c++ - 如何将 hash_map 与 char* 一起使用并进行字符串比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517483/

相关文章:

C++ 多态性没有按预期工作

c++ - 谁能解释为什么输出大于分配的内存?

c++ - C++ strtok跳过第二个标记或连续的定界符

c++ - 无法在我的代码中计算出 char* 字符串

algorithm - 你如何检测字符串列表中的重复?

c++ - C++ WDK STL 是否支持 wchar_t?我得到未解析的外部符号的 :(

c++ - 在 dlib 图像中写入文本

python - '\b' 字符如何存储在 python 的字符串中?

c++ - 更改字符串语言环境

c++ - 如何将没有构造函数参数的对象放置到 STL 容器中?