hash_set和hash_map自定义数据类型的处理
来源:互联网 发布:flv下载软件硕鼠 编辑:程序博客网 时间:2024/06/05 23:39
最近做毕业设计,用到hash_set和hash_map, 在VS2005下开发,处理自定义数据时,出现一大堆错误,花了将近一天才弄清楚,下面介绍:
hash_set和hash_map的数据结构定义差不多,能够处理基本数据类型,对于字符串和其他自定义数据如结构体、类等,则需要自行定义hash计算函数和hash比较函数,下面讨论处理字符串string( char *同)情况
1、首先SGI内部已经包含了能够对字符串的hash_value计算,但没有定义hash_compare函数,因此需定义:
如:VS2005
struct ENTRY(hash_map中做value)
{
int TFi; //
int A, B, C, D;
};
struct wstr_hash_compare: public hash_compare<wstring>
{
public:
//重写字符串的hash_value计算,由于容器内部已经实现了字符串的hash函数, 因此此函数可有可无
inline size_t operator()( const wstring &s)const {
unsigned long _h = 0;
for(size_t i= 0; i<s.size(); i++)
_h = 31*_h + s[i];
return size_t(_h);
}
//重写,必须有,否则使用find()函数时,将无法找到该值
bool operator()( const wstring &s1, const wstring &s2 )const //定义比较函数
{
return comp (s1, s2); //return s1<s2;
}
};
typedef hash_set<wstring, wstr_hash_compare> HDic; //HDic为词典结构
typedef hash_map<wstring, ENTRY,wstr_hash_compare >HEntryW;
int main()
{
HDic h_set; //顶一个set容器
HEntryW h_map; //定义一个map容器
ENTRY entrys[2] ={ {0,1,2,3} , {4,5,6,7};
h_set.insert( L"张三");
h_set.insert( L"李四");
h_map[L"张三"] = entrys[0];
h_map[]...................
return 0;
}
注意:msdn上面的自定义数据类型时没有将hash_value计算和hash_compare集合在一个struct或class中,如下
struct wstr_hash{
public:
//字符串的hash_value计算,由于容器内部已经实现了字符串的hash函数, 因此此函数可有可无
inline size_t operator()( const wstring &s)const {
unsigned long _h = 0;
for(size_t i= 0; i<s.size(); i++)
_h = 31*_h + s[i];
return size_t(_h);
}
}
//分开
struct wstr_equal{
bool operator()( const wstring &s1, const wstring &s2 )const //定义比较函数
{
return s1<s2;
}
};
typedef hash_set<wstring, wstr_hash> HDic; //HDic为词典结构
typedef hash_map<wstring, ENTRY,wstr_hash, wstr_equal>HEntryW;
int main()
{
HDic h_set; //编译无法通过
HEntryW h_map; //编译无法通过
............................
}
这是很多版本上的写法,貌似linux上可以编译通过,没试过,各位可以实践下
- hash_set和hash_map自定义数据类型的处理
- C++中hash_map和hash_set的用法
- hash_set和hash_map
- Linux包含hash_map和hash_set的not declared问题
- hash_map 与 hash_set 详解
- hash_map hash_set命名空间
- hash_map 与 hash_set 详解
- hash_map 与 hash_set 详解
- hash_map 与 hash_set 详解
- hash_set,hash_map,hash_multiset,hash_multimap
- 在windows 和 linux下引入hash_set、hash_map头文件
- 在windows 和 linux下引入hash_set、hash_map头文件
- 在windows 和 linux下引入hash_set、hash_map头文件
- hash_map自定义数据类型作key
- hash_map 与 hash_set 详解 ( 转 )
- 【转】hash_map 与 hash_set 详解
- set,map,hash_set,hash_map概览
- 【STL源码剖析读书笔记】【第5章】关联式容器之hash_set、hash_map、hash_multiset和hash_multimap
- Eclipse中CVS界面功能描述 --特殊情况及其处理(一)
- [zz]js动态div添加
- Eclipse中CVS界面功能描述 --特殊情况及其处理(二)
- ViewState与Session,以后知道怎么在page中设计变量了
- base64加密
- hash_set和hash_map自定义数据类型的处理
- debug python
- [zz]IE和Firefox下event乱谈
- C语言标准函数库
- MFC 选择文件夹的对话框
- C# 运行时调用dll、dll中对象、对象中方法等
- poj 3067 Japan
- javascript-高级对象
- 谦虚、谦虚、再谦虚