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