#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是指忽略警告