c++stl hash_set hashtable hash函数 c++hash库,hash_set和set的区别

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的区别

  1. set用红黑树实现,需要自动排序,依赖输入序列随机分布,才能达到良好的效果。
  2. 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*处理,其他类型原样返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值