
valuetype就是T,
找logN

删除成功了就返回1,没删除成功就返回0

类似以下
节点删掉 pos失效
一种是有做孩子或者右孩子,删除后,野指针问题,另一种是替代法,也认为是失效,意义变了
第二个更好
支持两个树swap,两个树swap,swap根节点就行,

返回这个值在里面的个数

cpp
int main()
{
std::set<int> myset;
for (int i = 1; i < 10; i++)
myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90
for (auto e : myset)
{
cout << e << " ";
}
cout << endl;
// [30, 50]值
// [25, 55]值
//// 返回 >= 30
//auto itlow = myset.lower_bound(30);
//// 返回 > 50
//auto itup = myset.upper_bound(50);
// 返回 >= 25
auto itlow = myset.lower_bound(25);
// 返回 > 55
auto itup = myset.upper_bound(55);
// 删除这段区间的值
myset.erase(itlow, itup);
for (auto e : myset)
{
cout << e << " ";
}
cout << endl;
}
删除是左闭右开
等于的值好找,大于的往上回,遍历就不划算了。
multiset不需要单独包头文件接口一样
差异:删除查找,好多个4找哪个,找中序第一个,左子树有三就是中序第一个
3比1大,往右找,找到这个3再继续往下找,说不定还有三
找到第一个,返回迭代器++就按照中序往后找



这个是删除所有4
这里更简单
查找中序第一个删除有多个通通干掉

交集要去重,如果放到set会天然去重,会排序

差集怎么办

看看3 2 0 -4在不在set内,不在就插入,在就带环就是环的入口点


这个可以改
之前搜索树分散放的。现在把key value放到结构体里面,结构体有两个成员fist 就是key second就是value,多封了一层,这是pair




pair没重载流茶入流提取所以变异不通过
存的结构可用->,

map不允许荣誉,如果key相等 value不相等,不会更新value,key相等就结束了


本质是两个const char*给initial list推出initial list是个pair,隐式类型转换成pair的stirng stirng.
一个是隐式类型转换一个是initiallizer list