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;
之后在用迭代器时,也要这样全声明, 程序就好了,原因还不清楚,待找到后,再编辑