title: stl2
tags: acm算法
categories: acm算法
set
set<int> a;
multiset<double> b;
struct Rec{
int a,b;
}
set<Rec> c;//注意这个地方需要重载小于号
- 支持size,empty,clear
- 迭代器,双向访问迭代器,支持*接触引用,仅支持++和–两个与算数有关的操作
- 不支持随机访问操作,类似于
set<int>::iterator itt = a.begin()
cout << *(itt+3) << endl;
会报错,因为仅支持上一个或下一个的操作,一次跳转多个的算是随机访问
3. 插入一个元素,因为是集合,具有无序性,所以insert的时候是无序的
a.insert(x)
- 查找
s.find(x)
在集合中查找等于x的元素,并返回该元素的迭代器,如果不存在则返回s.end()
lower_bound/upper_bound
- s.lower_bound(x),查找大于等于x的元素的最小的一个,并且返回该元素的迭代器
- s.upper_bound(x),查找大于x的元素中最小的一个,并且返回该元素的迭代器
erase
- 如果it是一个迭代器,s.erase(it)从it中删除迭代器it指向的元素
- 如果x是一个元素,s.erase(x)从s中删除所有等于x的元素
count()
- 返回s中等于x的元素个数,因为是集合,所以只有0和1会返回,但如果是multiset(x),则会返回x在multiset中存在的个数,因为multiset允许重复
map
- 一个键值对的key-value的映射
- map的key和value可以是任意类型,其中key
a[1] = 2;//在a[1]的位置插入2
a[1000000] = 3;//在key所在的位置插入3
- 和数组的区别:前后两个结构体是可以自由定义的
a["abc"] = 2;
cout << a["abc"] << endl;
结果是2
- size,empty,clear,begin,end都和set类似
- insert’erase,参数必须是pair[HTML_REMOVED],即插入的时候必须令键的类型和值的类型相匹配
pair
- 二元组
pair<int,string> a;
a = {3,"yxc"};
cout << a.first << ' ' << a.second << endl;
- pair支持比较运算,先比较first,再比较second