#include <iostream>
#include <vector>
#include <set>//set底层实现是红黑树 set和multiset 内部实现都是相同的
using namespace std;
int main(){
// set头文件里有两种不同的容器
set<int> a;//set里不能包含重复元素 元素不能重复 如果插入重复元素的话 就会忽略掉这个操作
multiset<int> b;//元素可以重复 这里面可以插入两个1 三个1 都是可以的
set<int>::iterator it = a.begin();
// it++;//++指有序序列里的下一个元素 --指有序序列里的前一个元素 --it和++it也是有的
//和vector一样有end迭代器 表示迭代器最后元素的后一个位置
a.end();
a.insert(x);//表示插入一个x
a.find(x);//指查找一个x 他会返回值等于x的一个迭代器 如果没找到x的话 他的值会返回a.end();
//所以我们可以根据这个判断x是否在a里面存在
// if(a.find(x) == a.end())//判断x在a中是否存在 但是一般判断不这么写 会用后面一个函数
a.lower_bound(x);
//找到大于等于x的最小的元素迭代器
a.upper_bound(x);
//找到大于x的最小的元素迭代器 注意!!!是大于 不是小于 不要用字面意思理解
a.erase(it);//指把it的所有迭代器全部删掉
a.count(x);//表示的是x在a里面的个数//因为set里面不能重复 如果重复会忽略所以如果x存在返回1 如果x不存在返回0 返回个数草泥马小伙子误人子弟啊
//当然也可以定义一个结构体 用结构体定义一个set
//因为set里面是需要做比较的,所以我们也是需要去重载一个小于号的
struct Rec{
int x, y;
bool operator< (const Rec& t) const{
return x < t.x;
}
};
set<Rec> c;//定义结构体
//size/empty/clear 和vector类似
//set支持迭代器 也是支持++ --两个宇算数相关的操作 set里的++--比较复杂 其实是找有序序列的下一个元素 在一个alpha树里他是找当前点的前驱或者后继 也可以理解为找有序序列的前一个元素或者后一个元素
}