hash_set
底层用hashtable实现
F:\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\backward\hash_set
测试代码
#include <iostream>
#include<hash_set>
using namespace std;
using namespace __gnu_cxx;//注意namespace
int main()
{
hash_set<int> set;
set.insert(3);
cout<<set.size()<<endl;
return 0;
}
hash_set和set的区别
- set用红黑树实现,需要自动排序,依赖输入序列随机分布,才能达到良好的效果。
- hash_set用hashtable实现,不需要自动排序,不依赖输入序列的分布。
hashtable
底层结构:vector里装的是list的头结点。每个vector的元素都是一个桶,代表有相同hash值的节点。
#include <iostream>
#include<hash_set>
using namespace std;
using namespace __gnu_cxx;//注意namespace
int main()
{
hashtable<int,int,__gnu_cxx::hash<int>,_Identity<int>,equal_to<int>> myhash(50,__gnu_cxx::hash<int>(),equal_to<int>());
//50个桶
cout<<myhash.size()<<endl;//0
cout<<myhash.bucket_count()<<endl;//53,质数
myhash.insert_unique(59);
myhash.insert_unique(63);
for(auto i:myhash){
cout<<i<<endl;
}
return 0;
}
hash函数
#include<hash_fun.h>
只对char*处理,其他类型原样返回。