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

时间:2009-10-04 21:56:50

标签: c++ string stl hashmap

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

那么,是否有比较器进行字符串比较?


Related link

2 个答案:

答案 0 :(得分:4)

嗯,std::strcmp是由C ++定义的#include <cstring>SGI's hash_map doc中的示例提供了基于strcmp的示例,为char *创建自己的相等测试函数(引自SGI doc开头):

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)来处理这种事情。

答案 1 :(得分:0)

STL对字符串类型有find方法。这允许您在字符串中查找字符串,但您可以使用它来比较2个字符串。

否则你有一个comparison function std :: string vars。

任何这些变量都可以用char *构建。