hash_set哈希集合容器

hash_set哈希集合容器

一、原理

使用哈希表数据结构的关联容器。作为集合容器,它的元素不论几个分量,都视作一个单一数据类型,并不区分键值和映照数据,不允许插入重复数据。哈希函数是一个多对一的函数。

http://blog.163.com/zhoumhan_0351/blog/static/39954227200910710324846

SGI C++ STL哈希表采用链式结构,由表头和一系列单链组成;表头是一个数组式的线性表,用vector向量泛化出来,每个表头结点是个指针域,又称为桶。如图中所示

哈希表的遍历,它的迭代器从0,1,2.......号桶开始,由上到下逐一访问桶中元素,如上为21-8-15-...

SGL C++ STL使用质数作表长,并且用表长做求余运算的模,构造哈希函数。从质数数组中找出第一个不小于n(估计出来的元素个数)的质数作为表长的大小。

二、应用

只提供前向迭代器iterator和const_iterator。哈希表默认为193。同样,哈希表的操作也和前面的容器一样,有类似的构造和插入删除,查找等操作。不是C++ STL的标准容器,所以可用C++ STLport。

hash_set<int>hs; //空哈希表

hash_set<int> hs2(hs);

hash_set<int> hs(300);//389个元素

struct myhash{

 size_t operator()(int x) const{return x+2;}

};

hash_set<int,myhash> hs(300,myhash());//表长389,哈希函数对象为myhash

struct strequal{

 bool operator()(const char* s1,const char* s2) const{

 return strcmp(s1,s2)==0;

 }

};

hash_set<char*,hash<char*>,strequal> hs(300,hash<char*>(),strequal());//表长389,哈希函数对象为myhash,键值比较函数对象strequal

pair<iterator,bool> insert(const value_type&v)

void insert(InputIterator first,InputIterator last);//将迭代器first-last中元素插入到hash_set中。

size_type bucket_count() const //哈希表的表长

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值