我正在使用std::hash_map<char*,T>
,並以某種方式設法使其工作,但現在已經發現默認比較功能,euqal_to<char*>
做指針比較,而不是字符串比較。我已經通過製作自己的比較類型(使用C的strcmp
和它的大約5 LOC)來解決這個問題,但是如果STL中沒有一個已經存在,我會稍微感到震驚。如何使用hash_map與char *並做字符串比較?
那麼,有沒有比較器做字符串比較?
我正在使用std::hash_map<char*,T>
,並以某種方式設法使其工作,但現在已經發現默認比較功能,euqal_to<char*>
做指針比較,而不是字符串比較。我已經通過製作自己的比較類型(使用C的strcmp
和它的大約5 LOC)來解決這個問題,但是如果STL中沒有一個已經存在,我會稍微感到震驚。如何使用hash_map與char *並做字符串比較?
那麼,有沒有比較器做字符串比較?
那麼,std::strcmp
是由C++定義的,當你做#include <cstring>
。在SGI's hash_map doc的例子提供了製備用於字符*的(從SGI文檔的開頭引用)自己平等的測試功能的strcmp
基於例如:
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)來處理這種事情。
的STL具有用於串類型find
方法。這可以讓你在字符串中找到一個字符串,但是你可以用它來比較兩個字符串。
否則你有一個comparison function爲std ::字符串變量。
任何這些變量都可以用char *構造。
hash_map不是C++標準的一部分。你在使用哪一個? Dinkumware,SGI版本,還是....? – 2009-10-04 22:03:35
爲什麼不使用std :: strings? – GManNickG 2009-10-04 22:50:32
hash_map是不是標準? (我希望這是「尚未」)... SGI,我認爲 – BCS 2009-10-04 22:57:58