您的位置:首页 > 其它

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

2013-03-18 15:16 218 查看
一 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:允许键值重复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: