linux c++ stl hash_map basic_string 使用

stl的hash_map对int 支持良好,但是对string支持不够,经过良久查找,找到linux c++下使用stl 的hash_map 对stl string的用法

#include <ext/hash_map>  

using namespace std;  
using namespace __gnu_cxx; 


namespace __gnu_cxx
{
template<> struct hash<string>
{  
size_t operator()(const string& s) const  
{return __stl_hash_string(s.c_str());}
};  
}  

有了上面的声明后,就可以像使用map一样使用hash_map了

!!!! 上面的程序编译通过了,但是放到服务器上执行的时候,base_string不断的出现析构的段错误,

malloc_printerr()

__libc_message()

signal 6  aborted 等一系列 让人茫然的错误


后来想了想,参考同事的代码,把hash map的使用 改成这样:

#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;
struct str_hash
{
    size_t operator()(const string& str) const
    {
        return __gnu_cxx::__stl_hash_string(str.c_str());
    }
};
struct str_equal
{
    bool operator()(const string& s1,const string& s2) const
    {
        return s1==s2;
    }
};

hash_map<string,bool , str_hash, str_equal>   m_h;

之后在用迭代器时,也要这样全声明, 程序就好了,原因还不清楚,待找到后,再编辑

你可能感兴趣的:(linux c++ stl hash_map basic_string 使用)