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; }