集合(Set)是一种包含已排序对象的关联容器。 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,它不会插入相同键值的元素,而采取忽略处理.
平衡二叉树的检索使用中序遍历算法,检索效率高于vector、deque和list等容器。
对于set容器中的键值,不可直接去修改!应该先删除该键值,再插入新的键值。
v.begin(); 返回指向容器最开始位置数据的指针
v.end(); 返回指向容器最后一个数据单元+1的指针
可以自动排序 去重
头文件为#include <set>
1.创建set集合对象
set <int> s;
Element容器中的数据类型(可以是int,double等系统自带的类型,也可以为自定义类型)
2.元素的插入和遍历
insert()插入元素
迭代器遍历
#include <iostream>
#include <set>
using namespace std;
int main()
{
set <int> s; //建立set容器
s.insert(6);//插入6
s.insert(1);//插入1
s.insert(9);//插入9
s.insert(1);//插入1
for(set<int>::iterator it = s.begin(); it != s.end(); it++)//定义前向迭代器遍历输出
{
printf("%d ",*it);
}
printf("\n");
for(set<int>::reverse_iterator rit = s.rbegin(); rit != s.rend(); rit++)//定义反向迭代器遍历输出
{
printf("%d ",*rit);
}
return 0;
}
2.元素的删除
erase()删除函数,删除某一个元素或者某一段。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set <int> s; //建立set容器
s.insert(6);//插入6
s.insert(1);//插入1
s.insert(9);//插入9
for(set<int>::iterator it = s.begin(); it != s.end(); it++)//定义前向迭代器遍历输出
{
printf("%d ",*it);
}
s.erase(9);//删除9
printf("\n");
for(set<int>::iterator it = s.begin(); it != s.end(); it++)//定义前向迭代器遍历输出
{
printf("%d ",*it);
}
printf("\n");
return 0;
}
3.元素的检索
find()函数查找键值,查找到就返回迭代器位置,如果查找不到返回end位置的迭代器
count()函数判断某个元素是否存在
#include <iostream>
#include <set>
using namespace std;
int main()
{
set <int> s; //建立set容器
s.insert(6);//插入6
s.insert(1);//插入1
s.insert(9);//插入9
set<int>::iterator it;
it=s.find(6);//查找键值6,如果查找不到返回end位置的迭代器
if(it != s.end())//找到了
printf("%d\n",*it);
else
printf("not find it\n");
//查找元素999是否存在存在返回true不存在返回fasle
if(s.count(999))//找到了
printf("%d\n",*it);
else
printf("not find it\n");
return 0;
}