1.什么是set?
是一个内部自动有序且不含重复元素的容器,是一种可以将元素的自动去重与并
将元素按升序排序的数据结构

适用于需要去重但是又不方便直接开数组的情况,由于插入的元素会自动排序,所以相对数组的进一个元素直接在后面存一个元素来说,是一种无(输入先后)顺序的数据结构。(或者可以理解为set在元素的存储是无序的:输入一个数,不考虑其值的大小,这个元素可能是在 set中的任意位置,而数组输入却只能把这个元素接在数组最后,它的位置是由元素中存放的值而决定)【为保证存储值的有序化造成了数据存储的无序化】

2.set的定义:
a. set<数据类型名>集合名; //先定义一个容器,容器内无任何元素
b. set<数据类型名>集合名(另一个集合名); / /定义一个集合并用另一个集合初始化(只能是数据类型相同的集合,不能是数组)
c. set<数据类型名>集合名(另一个集合名.begin(), 另一个集合名.end()) //定义一个集合并用另一个集合初始化(只能是数据类型相同的集合,不能是数组)
d. set<数据类型名>集合名[集合数量]; //定义集合数组,其中每一个元素都是一个集合容器(类似于多个“a.”
注意::::::::: set<int> a(10); // error,未定义这种构造函数
set<int> a(10, 1); // error,未定义这种构造函数</int></int>

3.set的常用函数:
a. se.begin()   返回se容器的第一个元素
b. se.end() 返回se容器的最后一个元素
c. se.clear()    删除se容器中的所有的元素
d. se.empty()    判断se容器是否为空,空返回1,不空返回0
e. se.size()     返回当前set容器中的元素个数
f. se.erase(a); 删除元素a(可以是常量或用两个参数删除一个范围(左闭右开))
g. se.lower_bound(a); 返回一个迭代器,指向键值大于等于k的第一个元素
h. se.upper_bound(a); 返回一个迭代器,指向键值大于k的第一个元素
i. se.find(a); 返回一个迭代器,指向键值a
j. se. insert(a); 把a放入se容器(可以是常量)
k. se.max_size() 返回集合能容纳的元素的最大限值
l. 随学习经验不断增加中.......

4.代码实例:

#include<set>//STL--set头文件 
#include<iostream>
using namespace std;
//set<int> a(10);  error,未定义这种构造函
//set<int> a(10, 1);  error,未定义这种构造函数
//不能先定义集合中的元素个数
set <int> q;
set <int> e;
set <double> r;
set <double> w[100];//100个单个集合
set <int> t(q);//括号中不能是数组或类型不同的集合
int main() {
    int a;
    int b;
    q.insert(a);//可变量亦可常量 
    q.insert(5);
    q.insert(b);
    q.erase(q.begin(),q.end());
    cout<<q.empty()<<" ";
    r.insert(1.1); //插入数值 
    r.insert(2.2); 
    r.insert(3.5); 
    r.insert(4.4); 
    r.insert(5.3); 
    r.insert(a); 
    cout<<r.max_size()<<" ";
    cout<<r.size()<<" ";
    //返回迭代器的函数不允许直接输出 例:cout<<r.find(5);
    r.erase(a);
    r.erase(5.3); 
    return 0;
}