自学内容网 自学内容网

set、multiset、unordered_set的区别以及常见用法 + 基本位运算bitset常见用法

set的常见用法

成员函数功能
begin()返回set容器的第一个元素
end()返回set容器的最后一个元素
size()返回当前set容器中的元素个数
max_size()返回set容器可能包含的元素最大个数
clear()删除set容器中的所有的元素
empty()判断set容器是否为空
insert()插入元素
count()统计元素出现的次数
erase(it)、erase(a,b)删除it元素、删除a到b的值
find()返回给定值(这个值必须用迭代器) ,找不到返回end()
lower_bound(key_value)返回第一个大于等于key_value的定位器
upper_bound(key_value)返回第一个大于key_value的定位器

set的简单介绍

  • set存放的元素呈升序
  • set当中存储元素的value都是唯一的,不可以重复
  • set中的元素不能被修改

multiset

  • multiset容器和set容器的唯一区别就是,multiset允许键值冗余,即multiset容器当中存储的元素是可以重复的
  • 基本用法与set一致

unordered_set

  • 无序集合(unordered_set)是一种使用哈希表实现的无序关联容器
  • 无序集合上的所有操作在平均情况下都具有常数时间复杂度O(1)
  • 所有键必须是唯一的
  • 与前两者不同,它不会进行升序排序
  • 基本用法与set一致

bitset

常见用法

成员函数功能
set设置指定位
reset清空指定位
flip反转指定位
test获取指定位的状态(1 or 0)
count获取被设置位的个数(1的个数)
size获取可以容纳的位的个数
any如果有任何一个位被设置则返回true
none如果没有位被设置则返回true
all如果所有位都被设置则返回true
int main()
{
bitset<16> bs;
bs.set(4);
bs.set(6);
bs.set(2);
cout << bs.size() << endl;//16
cout << bs << endl;//0000000001010100
//获取指定位的状态
cout << bs.test(0) << endl;//0
cout << bs.test(2) << endl;//1
//反转所有位
bs.flip();
cout << bs << endl;//1111111110101011
//反转第1位
bs.flip(1);
cout << bs << endl;//1111111110101001
cout << bs.count() << endl;//12
//清空第3位
bs.reset(3);
cout << bs << endl;//1111111110100001
//清空所有位
bs.reset();
cout << bs.none() << endl;//1
cout << bs.any() << endl;//0
//设置所有位
bs.set();
cout << bs.all() << endl;//1
return 0;
}

实际操作

bitset可以实现所有位运算的操作,同时可以减少时间和空间的消耗,大大减少时间复杂度和空间复杂度

int main()
{
//>>输入、<<输出运算符
bitset<8> bs;
cin >> bs;//10100
cout << bs << endl;//00010100
//复合赋值运算符
bitset<8> bs1("101011");
bitset<8> bs2("100100");
cout << (bs1 >>= 2) << endl;//00001010
cout << (bs2 |= bs1) << endl;//00101110
//位运算符
bitset<8> bs3("10010");
bitset<8> bs4("11001");
cout << (bs3 & bs4) << endl;//00010000
cout << (bs3 ^ bs4) << endl;//00001011
//operator[]运算符
cout << bs3[4] << endl;//1
cout << bs3[2] << endl;//0
}

bitset参考:https://blog.csdn.net/m0_64224788/article/details/130207142?ops_request_misc=&request_id=&biz_id=102&utm_term=bitset&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-130207142.142^v100^pc_search_result_base5&spm=1018.2226.3001.4187


原文地址:https://blog.csdn.net/wh233z/article/details/140587968

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!