二叉树----set集合容器

来源:互联网 发布:学软件编程有前途吗 编辑:程序博客网 时间:2024/06/06 09:47

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_iteratorrit;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);elseprintf("没有找到!\n"); }if(ch==5){s.clear();printf("成功清空集合容器!\n");}printf("*****************************\n");}printf("成功退出操作!\n");return 0;}


原创粉丝点击