set的相关操作

来源:互联网 发布:铝材下料软件 编辑:程序博客网 时间:2024/06/10 16:47
#include <cstdio>#include <set>#include <iostream> using namespace std;struct myComp{bool operator ()(const int&a,const int& b){return a>b;}};int main(int argc, char *argv[]){set<int,myComp> s;s.insert(8);s.insert(1);s.insert(12);s.insert(6);s.insert(8);set<int>::iterator it;for(it=s.begin();it!=s.end();it++)//中序遍历; cout<<*it<<" ";cout<<endl;set<int,myComp>::iterator jiao;for(jiao=s.begin();jiao!=s.end();jiao++)//定义向前迭代器; cout<<*jiao<<" ";cout<<endl;set<int>::iterator zh;zh=s.find(8);  if(zh!=s.end()) cout<<*zh<<endl;//元素检索; set<int,myComp>::reverse_iterator rit;for(rit=s.rbegin();rit!=s.rend();rit++)//反向遍历; cout<<*rit<<" ";cout<<endl;s.erase(6);s.erase(8);set<int>::reverse_iterator in;for(in=s.rbegin();in!=s.rend();in++)//元素删除; cout<<*in<<" ";cout<<endl;return 0;}


注:

set集合容器实现了红黑树的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树根节点的键值;另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。

平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector,deque和list等容器。另外,采用中序遍历算法可将键值从小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素键值由小到大顺序排列。

对于set容器的键值,不可直接修改。以为如果把容器中的一个键值修改了,set容器会根据新的键值旋转子树,以保持新的平衡,这样修改的键值很可能就不在原先那个位置上了,换句话来说,构造set集合的主要目的就是为了快速检索。


与multiset唯一不同的是,后者可以插入重复元素键值插入。

0 0