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

相关推荐

  1. C++常见STL容器基本

    2024-07-21 17:32:02       56 阅读
  2. mybatisPlus 常见

    2024-07-21 17:32:02       41 阅读
  3. JDBC常见

    2024-07-21 17:32:02       16 阅读
  4. Python中锁常见

    2024-07-21 17:32:02       59 阅读
  5. Lambda 表达式常见

    2024-07-21 17:32:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 17:32:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 17:32:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 17:32:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 17:32:02       55 阅读

热门阅读

  1. Python编程防止计算机休眠,保持唤醒状态

    2024-07-21 17:32:02       14 阅读
  2. 力扣题解(盈利计划)

    2024-07-21 17:32:02       18 阅读
  3. Mysql在linux安装报错

    2024-07-21 17:32:02       17 阅读
  4. 大型网站核心架构要素

    2024-07-21 17:32:02       15 阅读
  5. 看过来!看过来!python九大数据类型大整合!

    2024-07-21 17:32:02       15 阅读
  6. centos软件安装

    2024-07-21 17:32:02       20 阅读
  7. 内存屏障:程序员的“隐形护盾”

    2024-07-21 17:32:02       17 阅读
  8. 比较 WordPress 的 Baklib 和 BetterDocs

    2024-07-21 17:32:02       18 阅读
  9. npm install 出现canvas错误

    2024-07-21 17:32:02       14 阅读
  10. 作为一名程序员,怎样写出高效简洁的代码?

    2024-07-21 17:32:02       17 阅读