一. set:包含了经过排序了的数据,这些数据的值(value)必须是唯一的。
- 头文件: #include<set>
- 定义:定义一个元素为整数的集合a,可以用 set<int> a;
- 基本操作:
- 对集合a中元素的有
- 插入元素:a.insert(1);
- 删除元素(如果存在):a.erase(1);
- 判断元素是否属于集合:if (a.find(1) != a.end()) ...
- 返回集合元素的个数:a.size()
- 将集合清为空集:a.clear()
- 集合的并,交和差
set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin()));
(注意在此前要将c清为空集)。
- 默认情况:输出的结果从小到大,即15, 25, 35, 55; 若要从大到小输出,则这样定义集合:set<Teacher, greater<Teacher>> teachers; 输出的结果为:55, 35, 25, 15。
- 注意以下几点:
- 对于内置类型如int, double, float, string等,比较器以及输入输出操作符是系统已经定义好的;对于class, struct等类型,比较器即输入输出操作符都需重新写;如struct Teacher里面定义了比较器及重载输出操作符;
- set里面的元素有序且唯一,在默认的情况下,是按从小到大排序的;如果想让元素从大到小排序,则需要在定义集合时,模板参数中需加greater比较器,而且这里的参数是结构体本身,因此是greater<Teacher>,而不是对象greater<Teacher>();但是在sort函数中的比较器,则是对象。
- 例子程序: