Linux 下hash_map的使用
Linux下使用hash_map 問題
1:標頭檔案
#if __GNUC__>2
#include <ext/hash_set>
#include <ext/hash_map>
using namespace __gnu_cxx;
#else
#include <hash_set>
#include <hash_map>
using namespace stdext;
#endif
2:不支援string或char *為key的map 若用這個hash_map <char*, int> http_proxy_conn;
則比較時其實比較的是字串的地址,而不是字串本身
hash_map <string, int> http_proxy_conn等價於hash_map <string, int, hash, equal> http_proxy_conn,後兩個引數為預設系統的
解決方案:
struct str_hash
{
size_t operator()(const string& str) const
{
return __stl_hash_string(str.c_str());
}
};
struct str_equal
{
bool operator()(const string& s1,const string& s2) const
{
return s1==s2;
}
};
實現兩個函式 一個是hash函式,一個是比較函式
hash_map <string, int,str_hash, str_equal> http_proxy_conn;
即可正確查詢結果
hash_map <char *, int,str_hash, str_equal> http_proxy_conn的型別的應該也一樣
- #include <ext/hash_map>
- #include <iostream>
- #include <cstring>
- using namespace std;
- using namespace __gnu_cxx;
- struct eqstr{
- bool operator()(const char *s1, const char *s2)const{
- return strcmp(s1,s2) == 0;
- }
- };
- int main(){
- hash_map<const char *,int,hash<const char *>,eqstr> months;
- months["january"] = 31;
- months["february"] = 28;
- months["march"] = 31;
- cout << "march -> " << months["march"] << endl;
- }
- 不過沒有測試
再加入類
#include <hash_map>
#include <string>
#include <iostream>
using namespace std;
//define the class
class ClassA{
public:
ClassA(int a):c_a(a){}
int getvalue()const { return c_a;}
void setvalue(int a){c_a;}
private:
int c_a;
};
//1 define the hash function
struct hash_A{
size_t operator()(const class ClassA & A)const{
// return hash<int>(classA.getvalue());
return A.getvalue();
}
};
//2 define the equal function
struct equal_A{
bool operator()(const class ClassA & a1, const class ClassA & a2)const{
return a1.getvalue() == a2.getvalue();
}
};
int main()
{
hash_map<ClassA, string, hash_A, equal_A> hmap;
ClassA a1(12);
hmap[a1]="I am 12";
ClassA a2(198877);
hmap[a2]="I am 198877";
cout<<hmap[a1]<<endl;
cout<<hmap[a2]<<endl;
return 0;
}
到最後嫌麻煩,直接改成map了,可以支援string為key
相關文章
- linux下的setenv使用Linux
- hash_map中string為key的解決方法
- linux下nc命令的使用Linux
- Linux下 kprobe工具的使用Linux
- 《Linux下sed命令的使用》Linux
- linux下svn命令的使用Linux
- Linux 下的 QQ 使用方案Linux
- Linux下cron的使用(轉)Linux
- linux下udev和mdev的使用Linuxdev
- Linux下getopt函式的使用Linux函式
- linux下crontab的使用實現Linux
- Linux下GPG的簡單使用Linux
- linux下裸裝置的使用Linux
- Linux下訊號燈的使用Linux
- linux下使用rman的問題Linux
- linux下sed的使用+練習Linux
- Linux下vi使用Linux
- linux 下 scp使用Linux
- Linux/Uninx下Oracle的oerr工具的使用LinuxOracle
- 談談Linux下Yum的使用薦Linux
- Linux下Cmake工具的使用【搬運】Linux
- linux 下使用NTFS格式Linux
- Linux下scp命令使用Linux
- Linux下使用icq(轉)Linux
- Linux下使用Nginx做CDN伺服器下的配置LinuxNginx伺服器
- Linux下磁碟分割槽工具cfdisk的使用Linux
- linux下Anaconda的安裝和使用Linux
- Linux下使用者和組的管理Linux
- Linux下getopt()函式的簡單使用Linux函式
- iPython在Linux下的簡單使用PythonLinux
- Linux下連結串列的使用及探究Linux
- linux系統下的使用者管理Linux
- Linux下rz,sz與ssh的配合使用Linux
- linux下使用mysql的C語言APILinuxMySqlC語言API
- Linux下使用mozilla的幾個問題Linux
- Linux下XFConfig的有效使用(轉)Linux
- linux下使用者使用sql*plus的環境配置LinuxSQL
- Linux下的使用者及使用者組配置Linux