2009-10-04 86 views
4

我正在使用std::hash_map<char*,T>,並以某種方式設法使其工作,但現在已經發現默認比較功能,euqal_to<char*>做指針比較,而不是字符串比較。我已經通過製作自己的比較類型(使用C的strcmp和它的大約5 LOC)來解決這個問題,但是如果STL中沒有一個已經存在,我會稍微感到震驚。如何使用hash_map與char *並做字符串比較?

那麼,有沒有比較器做字符串比較?


Related link

+4

hash_map不是C++標準的一部分。你在使用哪一個? Dinkumware,SGI版本,還是....? – 2009-10-04 22:03:35

+0

爲什麼不使用std :: strings? – GManNickG 2009-10-04 22:50:32

+0

hash_map是不是標準? (我希望這是「尚未」)... SGI,我認爲 – BCS 2009-10-04 22:57:58

回答

4

那麼,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)來處理這種事情。

+0

我會接受默認設置,但是我認爲提供預先構建的選項是個好主意。 – BCS 2009-10-04 22:59:59

+0

這實際上就是我所做的,如果文檔將它用作有更好方法的示例,我會感到驚訝。 – BCS 2009-10-04 23:04:34

+1

我同意,如果'namespace std'爲'std :: less '和'std :: equal '提供了面向字符串的替代方法,這將是有意義的。但這些應該是替代名稱,而不是專業化。 – MSalters 2009-10-05 09:00:08

0

的STL具有用於串類型find方法。這可以讓你在字符串中找到一個字符串,但是你可以用它來比較兩個字符串。

否則你有一個comparison function爲std ::字符串變量。

任何這些變量都可以用char *構造。