三 关联式容器(四)hash_set与hash_multiset

一 hash_set的定义:

(1)hash_set以hashtable为底层机制,所以几乎所有的hash_set操作行为都是调用hashtable的操作行为而已。


(2)hash_set与set区别:

1.hash_set以hashtable为底层机制,而set以RB-tree为底层机制。

2.由于1,所以set有元素自动排序功能,而hash_set没有。

3.set在logN的下完成查找、插入和删除操作;hash_set可在常数时间复杂度下完成查找、插入和删除,但取决于哈希表的负载情况。

4.hash_set的使用方式与set是完全相同的。


(3)<hash_set>中hash_set的定义:

template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
class hash_set
{
private:
  typedef hashtable<_Value, _Value, _HashFcn, _Identity<_Value>,
                    _EqualKey, _Alloc> _Ht;//这里提取键值的方法identity已经提供,所以声明hash_set对象时不需再提供。_Alloc也是已经提供的。


  _Ht  _M_ht;//底层机制以hashtable完成

}


二 hash_set的使用

1.在gcc环境下使用hash_set需包含<ext/hash_set>,并using namespace __gnu_ccc。

2.具体操作,见实现文件<ext/hash_set>

2.使用举例:

#include<iostream>
#include<ext/hash_set>//MinGW使用hash_set需包含这个头文件。
using namespace std;
using namespace __gnu_cxx;
int main()
{
hash_set<int,hash<int>,equal_to<int> >ht;//set具有默认构造函数。
cout<<ht.bucket_count()<<endl;//输出193,因为缺省使用大小为100的vector,而接近于100的内置的质数为193.
}


三 hash_multiset:允许键值重复。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值