set迭代器采用中序遍历,检索效率高于vector,默认从小到大自动排序;set容器中的数值,一经更改,set会根据新值旋转二叉树,以保证平衡;时间复杂度logn;
insert输入;
指针指向输出;
代码如下
#include <stdio.h>
#include <set>
#include <iostream>
using namespace std;
int main()
{
int a[100];
set<int> s;
for(int i=0;i<5;i++)
{
cin>>a[i];
s.insert(a[i]);
}
for(set<int>::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it;
}
return 0;
}
set 也可以实现从大到小排序
加(greater<int>)
#include <stdio.h>
#include <set>
#include <iostream>
using namespace std;
int main()
{
int a[100];
set<int,greater<int> > s;
for(int i=0;i<5;i++)
{
cin>>a[i];
s.insert(a[i]);
}
for(set<int,greater<int> >::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it;
}
return 0;
}
set可以删除单个元素,set的删除 ..............set.erase(2);表示删除2;
而vector不能在erase(元素的值),因为set中没有重复的元素;而vector有重复的元素,且是向量容器(每增加一个元素,就在后面延伸一个长度容纳该元素),如果删除一个元素,可能vector 有多个元素,无法确定删除哪个元素;
所以vector的删除需要用下标,v.erase(单个元素的下标),v.erase(区间的下标)...v.erase( 单个元素的下标 ,单个元素的下标);