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;
cout << bs << endl;
cout << bs.test(0) << endl;
cout << bs.test(2) << endl;
bs.flip();
cout << bs << endl;
bs.flip(1);
cout << bs << endl;
cout << bs.count() << endl;
bs.reset(3);
cout << bs << endl;
bs.reset();
cout << bs.none() << endl;
cout << bs.any() << endl;
bs.set();
cout << bs.all() << endl;
return 0;
}
实际操作
bitset可以实现所有位运算的操作,同时可以减少时间和空间的消耗,大大减少时间复杂度和空间复杂度
int main()
{
bitset<8> bs;
cin >> bs;
cout << bs << endl;
bitset<8> bs1("101011");
bitset<8> bs2("100100");
cout << (bs1 >>= 2) << endl;
cout << (bs2 |= bs1) << endl;
bitset<8> bs3("10010");
bitset<8> bs4("11001");
cout << (bs3 & bs4) << endl;
cout << (bs3 ^ bs4) << endl;
cout << bs3[4] << endl;
cout << bs3[2] << endl;
}
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