众所周知set为集合之意,底层使用平衡二叉树——红黑树实现;插入删除操作仅仅需要指针操作节点即可完成,不涉及到内存的移动和拷贝,在set中,元素都是唯一的。而且在默认的情况下会对元素自动进行升序排序,支持集合的交,差,并,对称差等一些集合上的操作,如果在集合中的元素允许使用重复那么可以用multiset。
set常用操作 头文件在这里插入代码片 #include<set> s.begin() 返回set容器的第一个元素 s.rbegin() 反向迭代器 s.end() 返回set容器的最后一个元素 s.clear() 删除set容器的所有元素 s.empty() 判断set容器`在这里插入代码片`是否为空 s.insert() 插入一个元素 s.erase() 删除一个元素 s.size() 返回当前set容器的元素个数 s.find() 查找一个元素,如果容器中元素不存在则返回s.end() s.lower_bound() 返回第一个大于或等于给定关键值的元素 s.upper_bound() 返回第一个大于给定关键值的元素(注意两者均不是小于) s.equal_range() 返回一对定位器,分别表示:第一个大于或等于给定关键值的元素 和 第一个大于大于关键值 的元素,返回值是一个pair类型、 如果这一对定位器中哪个返回失败,就会等于s.end(); s.equal_range().first表示大于或等于 s.equal_range().second表示大于而pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。
那么如果在set中插入一对数据对该怎么办。 可以如下操作:
#include<bits/stdc++.h>; using namespacce std; int main() { pair<double, double>p1; set<pair<double, double> >s; p1.first = 1; p1.second = 2; s.insert(p1); return 0; }最后献上例题: 链接:https://ac.nowcoder.com/acm/contest/6106/C