set

关于set

set翻译为集合,是一个内部自动有序且不含重复元素的容器。set最主要的作用就是自动去重并按升序排序,因此遇到需要去重但是又不方便直接开数组的情况,比如元素比较大或者类型不是int类型,可以尝试用set解决。set中的元素是唯一的,其内部采用“红黑树”实现。
使用set前,必须先添加set头文件,即#include,同时,不需要要有 “using namespace std”。
定义一个set的方法如下:

set<typename> name;

其中,typename可以是任何基本类型或者容器,name是集合的名字。例如:

set<int> st;

也可以定义set数组。例如:

set<int> st[100];

这样,st[0] ~ st[99] 中的每一个元素都是一个set容器。
需要注意的是,set只能通过迭代器访问,即先定义一个迭代器。

set<tpyename>::iterator it;

然后使用 *it 来访问set中的元素。set也不支持 *it + iit < st.end( )的访问方式(实际上除了vector和string之外的容器都不支持)。例如,以下一段代码输出“2 3 5”。

set<int>st;
st.insert(3);
st.insert(5);
st.insert(2);
st.insert(3);
for(set<int>::iterator it = st.begin();it != st.end();it++){
    printf("%d",*it);
}

set的常用函数

set的常用函数有insert、size、find、clear和erase等。
① insert( )和size( )
insert(x)用来将x插入到set中,并自动递增排序和去重,时间复杂度为\(O(\log_2N\)),N为set中的元素个数。size()用来获得set中的元素个数,时间复杂度为\(O(1)\)
② find( )
find(value)是返回set中对应值为value的迭代器,时间复杂度为\(O(\log_2N\))。例如,以下一段代码输出“3 2”。

set<int> st;
for(int i = 1;i <= 3;i++) st.insert(i);
printf("%d", st.size());
printf("%d",*(st.find(2)));

③ clear( )
cleat( )用来清空set中的所有元素,时间复杂度为\(O(n)\)

posted @ 2022-10-14 13:39  程易。  阅读(487)  评论(0)    收藏  举报