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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值