概述
set集合容器实现了红黑树(Red-Black Tree)的平衡二叉搜索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有检点的键值;另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而搜索速度最快。
set容器不会插入重复相同键值的元素,而采取忽略处理。下面网上找的一张set容器的图片
对于set容器中的键值,不可直接去修改。因为如果把容器中的一个键值修改了,set容器会根据新的键值去旋转子树,不断保持平衡。
而multiset多重集合容器与set一样,也是使用红黑树来组织元素数据,唯一不同的是,multiset允许重复的元素键值插入,而set则不允许。
下面是网上找的一张multiset多重集合容器图片
set、multiset容器的基本操作:
#include<set>
set<int> s; //集合容器
multiset<int> ms; //多重集合容器
/*插入元素n*/
s.insert(n);
ms.insert(n);
/*删除元素n*/
s.erase(n);
ms.erase(n);
/*查找元素n*/
s.find(n);
ms.erase(n);
/*清空容器*/
s.clear();
ms.clear();
/*返回容器个数*/
s.size();
ms.size();
元素的遍历用到迭代器(反向迭代器)遍历
嗯下面就是在VC中的测试:
#include<set>
#include<stdio.h>
using namespace std;
int main()
{
int j;
int ch;
int sum;
set<int> s;
set<int>::iterator it;
set<int>::reverse_iterator rit;
printf("请输入要插入元素个数:");
scanf("%d",&sum);
printf("请输入要插入的元素:");
for(int i=0;i<sum;i++)
{
scanf("%d",&j);
s.insert(j);
}
printf("*****************************n");
printf("1、插入元素n2、删除元素n");
printf("3、遍历元素n4、查找元素n");
printf("5、清空元素n0、退出操作n");
printf("*****************************n");
while(scanf("%d",&ch)&&ch!=0)
{
if(ch==1){
int n;
printf("请输入插入的元素:");
scanf("%d",&n);
s.insert(n);
printf("元素插入成功!n");
}
if(ch==2){
int n;
printf("请输入要删除的元素:");
s.erase(n);
printf("元素删除成功!n");
}
if(ch==3){
printf("元素的中序遍历:");
for(it=s.begin();it!=s.end();it++)
{
printf("%d ",*it);
}
printf("n元素的反向遍历:");
for(rit=s.rbegin();rit!=s.rend();rit++)
{
printf("%d ",*rit);
}
printf("n");
}
if(ch==4){
int n;
printf("请输入要查找的键值:");
it=s.find(n);
if(it!=s.end()) //找到
printf("%d ",*it);
else
printf("没有找到!n");
}
if(ch==5){
s.clear();
printf("成功清空集合容器!n");
}
printf("*****************************n");
}
printf("成功退出操作!n");
return 0;
}
最后
以上就是寂寞红酒为你收集整理的二叉树----set集合容器的全部内容,希望文章能够帮你解决二叉树----set集合容器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复