linux关于hash_map的使用(基于c++的,以string的key为例)
来源:互联网 发布:热血传奇刷元宝软件 编辑:程序博客网 时间:2024/06/06 18:06
1,包含相应头文件:
#include <ext/hash_map>
using namespace __gnu_cxx;
2,针对key进行处理:基本类型的key可以采用缺省的hash函数,而自定义类型需要实现相应的hash值计算函数与定义比较函数。
3,定义hash_map变量:
为减少冗余度,我们使用typedef来定义hash_map:
typedef hash_map< key, value, hasher, compare> myHmap;
这四个参数分别为:
key - 关键字、下标; value - 对应的值。hasher - hash函数,compare - key的比较函数
hash_map的成员函数基本与map一致。
一、关于hash函数:
对于基本类型的key,stl提供了以下hash函数,即如果key使用下面类型,就可以使用缺省的hash函数,当然,也可以自定义。
struct hash<char*>
struct hash<const char*>
struct hash<char>
struct hash<unsigned char>
struct hash<signed char>
struct hash<short>
struct hash<unsigned short>
struct hash<int>
struct hash<unsigned int>
struct hash<long>
struct hash<unsigned long>对于自定义类型,如string,就必须要自定义hash函数了,我们也可以利用系统定义的字符串hash函数:
struct str_hash
{
size_t operator() (const string& str) const
{
return __stl_hash_string(str.c_str());
}
}
三、hash_map的比较函数(以string为例)
struct compare_str
{
bool operator()(const char* p1, const char* p2) const
{
return strcmp(p1, p2)==0;
}
}
四,hash_map插入与取值过程:
其插入过程是:
- 得到key
- 通过hash函数得到hash值
- 得到桶号(一般都为hash值对桶数求模)
- 存放key和value在桶内。
其取值过程是:
- 得到key
- 通过hash函数得到hash值
- 得到桶号(一般都为hash值对桶数求模)
- 比较桶的内部元素是否与key相等,若都不相等,则没有找到。
- 取出相等的记录的value。
五,个人理解:
即,
存储:key -> f(key) 得到addr,将key和value存储于桶内地址addr
查询:key -> f(key) 得到addr,判断该addr的数据是否与key相等,如果相等则从该addr中读取出value。
参考:
http://blog.csdn.net/luo6620378xu/article/details/8515666
http://blog.csdn.net/sdhongjun/article/details/4517325#
http://stlchina.huhoo.net/twiki/bin/view.pl/Main/STLDetailHashMap
- linux关于hash_map的使用(基于c++的,以string的key为例)
- GCC hash_map中string为key的解决方法[Linux]
- hash_map中string为key的解决方法
- hash_map中string为key的解决方法
- hash_map中string为key的解决方法
- hash_map的key为自定义类型
- linux hash_map的使用
- hash_map自定义key类型的使用
- linux hash_map的使用(g++)
- Linux 下hash_map的使用
- Linux下hash_map的使用
- Linux 下hash_map的使用
- 缓冲区做key的hash_map
- hash_map 使用 string做 key
- VS2012关于hash_map的使用简略
- 【C++】STL的hash_map
- 以整数为key的哈希表
- hash_map的使用
- IDEA 创建maven工程,并提交到svn
- java当中的executor
- 为什么使用补码
- 【Cocos2d-x】地图滚动算法的实现
- C++中extern "C"含义深层探索
- linux关于hash_map的使用(基于c++的,以string的key为例)
- 日语学习之沪江N4基础 20141121 -2
- js获取标准北京时间
- Objective -C Runtime
- RAM和ROM和Flash ROM的区别
- C++中的public、protected、private区别详解
- QwtArrowButton,QwtSystemClock,QwtPlotPanner类参考---from Qwt-6.1.1
- hadoop 修改最大进程文件描述符数
- C/C+语言struct深层探索