hash_map 使用 string做 key

#include <iostream>
#include <string>
#include <ext/hash_map>
#include <string.h>

using namespace std;
using namespace __gnu_cxx;

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

struct eqstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) == 0;
  }
};

struct str_equal
{      //string 判断相等函数
    bool operator()(const string& s1,const string& s2) const
    {
        return s1==s2;
    }
};

int main()
{
    hash_map<const char*, int, hash<const char*>, eqstr> mymap;
    hash_map<string, int> strmap;

    mymap.insert(make_pair("aaaa",1));
    mymap.insert(make_pair("bbbb",2));

    strmap.insert(make_pair(string("cccc"),3));
    strmap.insert(make_pair(string("dddd"),4));

    hash_map<const char*, int, hash<const char*>, eqstr>::iterator mapitor_c = mymap.find("aaaa");
    printf("%d\n",mapitor_c->second);

    hash_map<string, int>::iterator mapitor_s = strmap.find("dddd");
    printf("%d\n",mapitor_s->second);
    return 0;
}


 

 

hash_map 不是stl 标准库中的,所以需要使用  using namespace __gnu_cxx,另外编译时需要加上  -std=c++0x -Wno-deprecated,否则会有大堆的警告。c++0x 指使用新版C++ 2011版,-Wno-deprecated是指忽略警告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值