STL之bitset

首先介绍一下大数据处理常用技巧Bitmap
Bitmap算法又叫位图算法
位图是在内存中连续的二进制位(bit ),这种方法对于大数据的处理应用很广。
举个例子:
给定长度为10的bitmap,每一个bit位分别对应着从1到9的10个整数,此时bitmap的所有位都是0。
这里写图片描述

把整形数3存入Bitmap中,对应存储位置的下标为3的位置,将bit置为1
这里写图片描述

有整形数5、6存入也一样,分别将对应位置的下标置为1
这里写图片描述

位图法几大优势:
1、不仅方便查询,还可以去掉重复的整形数。

2、用Bitmap还可以做位运算,按位& | ~,提高工作效率

3、节省存储空间,8位才占一个字节,如果用的hashset或者hashmap,同样的情况就要存储成int,占4个字节既32bits,而在Bitmap中只占1bit,内存节省了32倍。

实际处理大数据的时候可以用到C++标准库STL中的特殊容器bitset

bitset<bits>::bitset()    //默认构造函数,生成一个bitset,所有值初始化为0
bitset<50> flags;  

bitset<bits>::bitset(unsigned long value)
//产生一个bitset,以整数值value的二进制位作为初值
//如果value的值太小,前面不足的位被设为0
bitset<50> flags(7);  

explicit bitset<bits>::bitset (const string& str)
bitset<bits>::bitset (const string& str, string::size_type str_idx)
bitset<bits>::bitset (const string& str, string::size_type str_idx, string::size_type str_num)
/*以上所有形式都用来初始化bitset,以字符串str或其子串加以初始化。
该字符串或者子串中只能包含字符'0'和'1'
str_idx是str中用来初始化的第一个字符
如果省略str_num,从str_idx到str结束的所有字符都将用于初始化
若字符串中字符数量少于所需,前面多余的位置将被设为初值0
若字符串中字符数量多于所需,后面多余的位置将被忽略
如果str_idx>str.size(),抛出out_of_range异常
如果有字符非'0'非'1',抛出invalid_argument异常*/

bitset<50> flags(string("1010101")); 
bitset<50> flags(string("1111000"),2,3); 

size_t bitset<bits>::size() const   //返回位的个数

size_t bitset<bits>::count() const  //返回“位值为1”的位个数

bool bitset<bits>::any() const //判断是否有任何位被设为1,有1返回true

bool bitset<bits>::none() const //判断是否所有位被设为0,全0返回true

bool bitset<bits>::test(size_t idx) const //判断idx位置上的位是否被设为1

bool bitset<bits>::operator == (const bitset<bits>& bits) const //判断*this和bits的所有位是否相等

bool bitset<bits>::operator != (const bitset<bits>& bits) const//判断*this和bits中是否有些位不相等

bitset<bits>& bitset<bits>::reset()//将所有位设为false(0)

bitset<bits>& bitset<bits>::reset(size_t idx)//将位置idx上的位设为false(0)

bitset<bits>& bitset<bits>::flip()//反转所有位

bitset<bits>& bitset<bits>::flip(size_t idx)//反转位置idx上的位

bitset<bits>& bitset<bits>::operator ^= (const bitset<bits>& bits)//对每个位逐一进行异或运算,将*this中所有

bitset<bits>& bitset<bits>::operator |= (const bitset<bits>& bits)//对每个位逐一进行或运算

bitset<bits>& bitset<bits>::operator &= (const bitset<bits>& bits)//对每个位逐一进行与运算

bitset<bits>& bitset<bits>::operator <<= (size_t num)//将所有位向左移动num个位置,空出来的位设为false(0)

bitset<bits>& bitset<bits>::operator >>= (size_t num)//将所有位向右移动num个位置,空出来的位设为false(0)

部分测试:
这里写图片描述
这里写图片描述
运行结果
这里写图片描述

有感兴趣的可以把具体方法粘贴回去,在编译器上跑了看看。。。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值