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 //哈希表的表长