c++ stl2
目录
unordered_map、unordered_set 、bitset
set
set库包含两个:set 和multiset
set 是有序集合 ,multiset 是有序多重集合。
头文件:
# inlcude<set>
声明方法:
操作:
1. .size()、.empty()、.clear()
和vector容器是类似的
2.迭代器 .begin() .end()
vector的时候就再说迭代器,就把它理解为指针即可,可以使用*解除引用,支持++ 、--操作
一定要注意,所有的.end()方法(不仅是set的.end(),这里说的是所有容器的.end())都是返回的是序列最后一个元素的后一个位置,即是越界的!
3. .insert(x)、.find(x)
.insert(x)将x插入到有序set中
.find(x)查找x,若找到,就返回该元素的迭代器,若找不到就返回s.end() (这里*s.end()是一个不确定的值,因为s.end()已经越界了,相当于s[s.size()] )
4. .erase(x)
删除元素x
5. .count(x)
返回x的个数
6. .lower_bound()、upper_bound()
s.lower_bound(x)查找大于等于x的元素中最小的一个,并返回指向该元素的迭代器
s.upper_bound(x)查找大于x的元素中最小的一个,并返回指向该元素的迭代器
试一试:
pair
头文件
# include<utility>
声明:
操作:
.first()和.second()取两个元素
pair和vector都支持比较,a ==b a!=b a>b a<b 等等按照字典序来比较
map
非常nb
和python中的字典类似
可以将key和value映射起来
头文件:
# incldue<map>
声明:
操作:
1. .size() .empty() .clear()
2. .insert({key,value}) .erase(key)
3. [] 操作符
[] 操作,像数组一样可以去取key来得到value,还可以通过h[key]来进行赋值,时间效率是O(logn)。
试一试:
unordered_map、unordered_set 、bitset
头文件
# include<unorder_map> map是无序的,但是时间效率是O(1)
# include<unorder_set> set是无序的,不支持二分 时间效率是O(1)
# include<bitset> 这个是提供了一个容纳二进制串的容器
声明
bitset<1000>a , b ;ab两个二进制串都是1000
操作:
a.set(3)把a[3]设置成1
a.reset(3)把a[3]设置成0